2017-07-13 2 views
1

J'ai construit ce petit bloc de code pour interroger et stocker les valeurs d'un groupe de serveurs, ce qui semble bien fonctionner, mais j'aimerais savoir s'il existe une façon «PowerShell pure» de le faire.Meilleure façon d'interroger les registres de serveurs distants?

$eServers = Get-ExchangeServer 
$Servers = $eServers | ?{$_.Name -like "Delimit_server_group"} 
foreach ($server in $Servers) 
    { 
    [string]$Key1 = "\\$server\HKLM\SYSTEM\CurrentControlSet\Control\" 
    [string]$rKeys += (REG QUERY "$key1" /s) 
    } 

Répondre

2

Vous pouvez utiliser le RegistryKey class pour ouvrir un registre à distance:

$RemoteHKLM = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$server) 
$RemoteKey = $RemoteHKLM.OpenSubKey('SYSTEM\CurrentControlSet\Control') 
# Following will return all subkey names 
$RemoteKey.GetSubKeyNames() 

Vous aurez à mettre en œuvre traversal récursive vous-même si vous avez besoin d'une fonctionnalité équivalente à reg query /s

+0

Je vais y jeter un coup d'oeil merci !! – JTorres2020

1

Matthias' answer est probablement votre meilleur option, mais il existe d'autres approches que vous pourriez prendre aussi bien. Si PSRemoting est activé sur vos systèmes, vous pouvez par exemple appeler des commandes à distance comme ceci:

$key = 'HKLM:\SYSTEM\CurrentControlSet\Control' 

Invoke-Command -Computer $Servers -ScriptBlock { 
    Get-ChildItem $args[0] | Select-Object -Expand Name 
} -ArgumentList $key