Obter valor do registro remoto

Eu tenho o script abaixo que eu quero sair para vários servidores e obter o valor de um registro. Infelizmente, atualmente está apenas postando de volta o valor do registro local da máquina na qual estou executando o script.

Como faço para que o script seja executado no registro remoto?

ROTEIRO:

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 } } 

Você pode tentar usar o .net:

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

Tente o módulo de registro remoto , o provedor de registro não pode operar remotamente:

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

Se você tiver a comunicação remota do Powershell e a configuração do CredSSP, poderá atualizar seu código para o seguinte:

 $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 o registro remoto, você deve usar o .NET com o powershell 2.0

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

Se você precisar do SID do usuário e navegar pela pasta HKEY_USERS remota, siga 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') 

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

outra opção … precisa de remoting …

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

Usando o módulo python e 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) 

Mais informações $ reg /? no prompt de comando.