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 .
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
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:
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
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.
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:
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)