Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .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

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

  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 (bash) [Seleccionar]
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 (bash) [Seleccionar]
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:

   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.
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 (csharp) [Seleccionar]
function AddRegistryValue {

   param (
       [Parameter(Mandatory, Position=0, HelpMessage="Enter the registry path.")]
       [string]$path,

       [Parameter(Mandatory, Position=1, HelpMessage="Enter the name of the registry value.")]
       [AllowEmptyString()]
       [string]$value,

       [Parameter(Mandatory, Position=2, HelpMessage="Enter the value type.")]
       [string]$type,

       [Parameter(Mandatory, Position=3, HelpMessage="Enter the value data.")]
       [AllowEmptyString()]
       [string]$data
   )

   [int32]$result = 0

   $p = New-Object System.Diagnostics.Process
   $p.StartInfo.FileName  = "REG.exe"
   $p.StartInfo.Arguments = "ADD ""$path"" /V ""$value"" /T ""$type"" /D ""$data"" /F"
   $p.StartInfo.UseShellExecute = $false
   $p.StartInfo.CreateNoWindow  = $false
   $p.StartInfo.RedirectStandardOutput = $true
   $p.StartInfo.RedirectStandardError  = $true

   $p.Start() | Out-Null
   $stdOut = $p.StandardOutput.ReadToEnd()
   $stdErr = $p.StandardError.ReadToEnd()
   $p.WaitForExit()
   $result = $p.ExitCode
   $p.Close()

   Write-Host $p.StartInfo.FileName $p.StartInfo.Arguments
    Write-Host $stdOut
   Write-Host $stdErr

   return $result
}

function Pause {
   param (
       [Parameter(Mandatory=$false, Position=0, HelpMessage="Enter the message to display.")]
       [string]$message = "Press any key to continue..."
   )

   $console = [System.Console]
   $console::WriteLine($message)
   $console::ReadKey($true) | Out-Null

}  

AddRegistryValue -Path  'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device' `
                -Value 'DevicePasswordLessBuildVersion' `
                -Type  'REG_DWORD' `
                -Data  '0' `
                | Out-Null

Pause
Exit(0)