Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: rigorvzla en 20 Diciembre 2021, 20:50 pm



Título: Powershell Ayuda
Publicado por: rigorvzla en 20 Diciembre 2021, 20:50 pm
Hola amigos, espero todos esten bien, estoy buscando de crear una pequeña app que ejecute esta linea de comandos en powershell

Código:
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" -Name DevicePasswordLessBuildVersion -Value 0 -Type Dword -Force

Y no tengo ni la mas remota idea de como hacerlo, eh buscado en internet y me eh guiado con ese ejemplo, como resultado este codigo

Código:
  PowerShell ps = PowerShell.Create();
            ps.AddCommand(@"New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device -Name DevicePasswordLessBuildVersion -Value 0 -Type Dword -Force");
            ps.Invoke();

Pero no funciona y no tengo la mas remota idea de como seria, ya que el ejemplo es muy simple para lo que quiero hacer al parecer.

De antemano gracias .


Título: Re: Powershell Ayuda
Publicado por: EdePC en 20 Diciembre 2021, 21:35 pm
Dependerá de tu App el método para hacer el llamado con parámetros a otra aplicación, en este caso un PowerShell. Aunque no es tan necesario recurrir a una Shell PowerShell para algo tan simple, directamente puedes llamar a Reg.exe y pasarle los parámetros:

IMPORTANTE: Recuerda que para modificar HKLM se requieren permisos de Administrador

Código
  1. Reg.exe Add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /V DevicePasswordLessBuildVersion /T REG_DWORD /D 0 /F

Si necesitas llamar a PowerShell.exe entonces el comando sería:

Código
  1. PowerShell.exe New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" -Name DevicePasswordLessBuildVersion -Value 0 -Type Dword -Force

Yo evito usar PowerShell siempre que puedo porque su primer arranque es muy lento, además debes considerar también que el Path debe existir sino dará error


Título: Re: Powershell Ayuda
Publicado por: rigorvzla en 21 Diciembre 2021, 13:38 pm
eh usado el primer metodo y lo eh planteado asi:

Código:
   ProcessStartInfo p = new ProcessStartInfo("reg.exe");
            p.Arguments = @"add HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device / V DevicePasswordLessBuildVersion / T REG_DWORD / D 0 / F";
            Process.Start(p);

mas no se si asi como lo hice , es que deberia . ya que al ejecutarlo abre una ventana dos la cual se cierra de inmediato y no se si resulto el comando, si me guias un poco mas porfavor.


Título: Re: Powershell Ayuda
Publicado por: Mohicano en 22 Diciembre 2021, 04:56 am
Ese script no te va a funcionar ya que tienes fallos de sintaxis.

Regla básica y fundamental en el uso de parámetros por linea de comandos para cualquier programa:
 - Los argumentos con espacios en blanco hay que encerrarlos entre comillas.

Ej.
Código:
Programa.exe /Parametro "Valor con espacios"

Aparte, el símbolo y nombre de un parámetro se escribe sin espacios en blanco: "/Nombre", no "/ Nombre"

De todas formas todo eso daría igual, ya que si vas a utilizar PowerShell lo más lógico es utilizar sus funcionalidades integradas, no recurrir y depender de programas externos como REG.exe. El compañero EdePC te ha mostrado un ejemplo de cómo hacerlo.

Aun así, si quieres utilizar REG.exe, lo podrías hacer de la siguiente manera:

Código
  1. function AddRegistryValue {
  2.  
  3.    param (
  4.        [Parameter(Mandatory, Position=0, HelpMessage="Enter the registry path.")]
  5.        [string]$path,
  6.  
  7.        [Parameter(Mandatory, Position=1, HelpMessage="Enter the name of the registry value.")]
  8.        [AllowEmptyString()]
  9.        [string]$value,
  10.  
  11.        [Parameter(Mandatory, Position=2, HelpMessage="Enter the value type.")]
  12.        [string]$type,
  13.  
  14.        [Parameter(Mandatory, Position=3, HelpMessage="Enter the value data.")]
  15.        [AllowEmptyString()]
  16.        [string]$data
  17.    )
  18.  
  19.    [int32]$result = 0
  20.  
  21.    $p = New-Object System.Diagnostics.Process
  22.    $p.StartInfo.FileName  = "REG.exe"
  23.    $p.StartInfo.Arguments = "ADD ""$path"" /V ""$value"" /T ""$type"" /D ""$data"" /F"
  24.    $p.StartInfo.UseShellExecute = $false
  25.    $p.StartInfo.CreateNoWindow  = $false
  26.    $p.StartInfo.RedirectStandardOutput = $true
  27.    $p.StartInfo.RedirectStandardError  = $true
  28.  
  29.    $p.Start() | Out-Null
  30.    $stdOut = $p.StandardOutput.ReadToEnd()
  31.    $stdErr = $p.StandardError.ReadToEnd()
  32.    $p.WaitForExit()
  33.    $result = $p.ExitCode
  34.    $p.Close()
  35.  
  36.    Write-Host $p.StartInfo.FileName $p.StartInfo.Arguments
  37.    Write-Host $stdOut
  38.    Write-Host $stdErr
  39.  
  40.    return $result
  41. }
  42.  
  43. function Pause {
  44.    param (
  45.        [Parameter(Mandatory=$false, Position=0, HelpMessage="Enter the message to display.")]
  46.        [string]$message = "Press any key to continue..."
  47.    )
  48.  
  49.    $console = [System.Console]
  50.    $console::WriteLine($message)
  51.    $console::ReadKey($true) | Out-Null
  52.  
  53. }  
  54.  
  55. AddRegistryValue -Path  'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device' `
  56.                 -Value 'DevicePasswordLessBuildVersion' `
  57.                 -Type  'REG_DWORD' `
  58.                 -Data  '0' `
  59.                 | Out-Null
  60.  
  61. Pause
  62. Exit(0)