2013-02-25 16 views
15

Mam poniższy skrypt, który chcę, aby przejść do wielu serwerów i uzyskać wartość rejestru. Niestety, obecnie właśnie publikuje wartość lokalnego rejestru na komputerze, na którym uruchamiam skrypt.Uzyskaj zdalną wartość rejestru

Jak uzyskać uruchomienie skryptu w zdalnym rejestrze?

SCENARIUSZ:

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

Odpowiedz

31

Można spróbować użyć .NET:

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

Dzięki - to działa; jak włączyć to do LogWrite, że chcę, aby wartość została wyprowadzona do pliku dziennika mam? – lara400

+1

@ lara400 Jak robisz w swoim kodzie: 'LogWrite" $ computer1 STARTED $ NetbackupVersion1 "'. Ale może nie zrozumiałem twojego pytania ... –

+0

Wielkie dzięki - twój podstęp ...... tak jak Shay's! – lara400

4

Jeśli masz PowerShell usług zdalnych i konfiguracji CredSSP potem można zaktualizować swój kod do następujących:

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

Jeśli używasz zdalnego dostępu i nie chcesz używać modułów innych firm, użyj tego. Jest znacznie łatwiejszy do odczytania niż bezpośrednie wywołania metod. Czy CredSSP to coś podwójnego? Nie potrzebowałem tego. Dzięki! –

12

Wypróbuj Remote Registry Module, dostawca rejestru nie może działać zdalnie:

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

oh Nie wiedziałem, że to istnieje! neat-o – jbockle

+0

@shaylevy Zrobiłeś świetną robotę z tym modułem! –

+2

fantastyczne - właśnie to, czego potrzebowałem - dzięki za to - działało idealnie. – lara400

2

Do zdalnego rejestru trzeba użyć .NET z PowerShell 2.0

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

dzięki za to - wydaje się podobny do C.B i to działało. – lara400

2

Jeśli potrzebujesz SID użytkownika i przeglądanie folderu HKEY_USERS pilota, można wykonać ten skrypt:

<# 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’) 

Źródło: http://techsultan.com/how-to-browse-remote-registry-in-powershell/

-2

Korzystanie z modułu python i 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) 

Więcej informacji $ reg /? w wierszu polecenia.

+0

Ludzie, którzy odrzucą to negatywne, powinni wyjaśnić, dlaczego sugerują, że nie jest to dobra odpowiedź. W ten sposób wszyscy mogą się poprawić. – Carol

0

innej opcji ... potrzebuje remoting ...

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