Obtener valor de registro remoto

Tengo el siguiente script que quiero que salga a varios servidores y obtenga el valor de un registro. Desafortunadamente, actualmente solo está publicando el valor del registro local de la máquina en la que estoy ejecutando el script.

¿Cómo hago para que la secuencia de comandos se ejecute en el registro remoto?

GUIÓN:

clear #$ErrorActionPreference = "silentlycontinue" $Logfile = "C:\temp\NEWnetbackup_version.log" Function LogWrite { param([string]$logstring) Add-Content $Logfile -Value $logstring } $computer = Get-Content -Path c:\temp\netbackup_servers1.txt foreach ($computer1 in $computer){ $Service = Get-WmiObject Win32_Service -Filter "Name = 'NetBackup Client Service'" -ComputerName $computer1 if (test-connection $computer1 -quiet) { $NetbackupVersion1 = $(Get-ItemProperty hklm:\SOFTWARE\Veritas\NetBackup\CurrentVersion).PackageVersion if($Service.state -eq 'Running') { LogWrite "$computer1 STARTED $NetbackupVersion1" } else { LogWrite "$computer1 STOPPED $NetbackupVersion1" } } else { LogWrite "$computer1 is down" -foregroundcolor RED } } 

Puedes intentar usar .net:

 $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer1) $RegKey= $Reg.OpenSubKey("SOFTWARE\\Veritas\\NetBackup\\CurrentVersion") $NetbackupVersion1 = $RegKey.GetValue("PackageVersion") 

Pruebe el Módulo de registro remoto , el proveedor de registro no puede operar de forma remota:

 Import-Module PSRemoteRegistry Get-RegValue -ComputerName $Computer1 -Key SOFTWARE\Veritas\NetBackup\CurrentVersion -Value PackageVersion 

Si tiene Powershell remoto y configuración de CredSSP, puede actualizar su código a lo siguiente:

 $Session = New-PSSession -ComputerName $Computer1 -Authentication CredSSP $NetbackupVersion1 = Invoke-Command -Session $Session -ScriptBlock { $(Get-ItemProperty hklm:\SOFTWARE\Veritas\NetBackup\CurrentVersion).PackageVersion} Remove-PSSession $Session 

Para el registro remoto, debe usar .NET con powershell 2.0

 $w32reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$computer1) $keypath = 'SOFTWARE\Veritas\NetBackup\CurrentVersion' $netbackup = $w32reg.OpenSubKey($keypath) $NetbackupVersion1 = $netbackup.GetValue('PackageVersion') 

Si necesita el SID del usuario y busca la carpeta HKEY_USERS remota, puede seguir este script:

 <# Replace following domain.name with yours and userAccountName with remote username #> $userLogin = New-Object System.Security.Principal.NTAccount(“domain.name“,”userAccountName“) $userSID = $userLogin.Translate([System.Security.Principal.SecurityIdentifier]) <# We will open HKEY_USERS and with accurate user's SID from remoteComputer #> $remoteRegistry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('Users',”remoteComputer“) <# We will then retrieve LocalName value from Control Panel / International subkeys #> $key = $userSID.value+”\Control Panel\International” $openKey = $remoteRegistry.OpenSubKey($key) <# We can now retrieve any values #> $localName = $openKey.GetValue('LocaleName') 

Fuente: http://techsultan.com/how-to-browse-remote-registry-in-powershell/

otra opción … necesita interacción …

 (invoke-command -ComputerName mymachine -ScriptBlock {Get-ItemProperty HKLM:\SOFTWARE\VanDyke\VShell\License -Name Version }).version 

Usando el módulo python y wmi.

 import wmi conn = wmi.WMI('172.20.58.34', user='UserName', password='Password') command = r'cmd /c reg query "HKLM\SOFTWARE\Microsoft" /ve > C:\output.txt' conn.Win32_Process.Create(CommandLine=command) 

Más información $ reg /? en el símbolo del sistema.