2016-02-11 40 views
0

我想用PowerShell遞歸地讀取一些註冊表設置。 這是我的嘗試:用PowerShell遞歸讀取註冊表設置

$registry = Get-ChildItem "HKLM:\Software\Wow6432Node\EODDashBoard\moveFilesOverflow" -Recurse 
Foreach($a in $registry) { 
    Write-Output $a.PSChildName 
    $subkeys = (Get-ItemProperty $a.pspath) 
    Write-Output $subkeys.LastDateTime_EndScript 

} 

我希望能夠列出所有註冊表項與自己的價值,而不會knowning註冊表項。

用我的腳本我有一個變量$子鍵包含我可以訪問的對象。 (比如這裏我可以訪問$subkeys.LastDateTime_EndScript

不過我想什麼是列出所有與他們的價值的註冊表項不知道在我的腳本中的註冊表項,即是這樣的:

Foreach ($subkey in $subkeys) { 
    Write-Output $subkey.keyname 
    Write-Output $subkey.value 
} 

是有可能嗎? 謝謝,

回答

2

您可以遍歷屬性。使用你的想法,這將是:

foreach ($a in $registry) { 
    $a.Property | ForEach-Object { 
     Write-Output $_ 
     Write-Output $a.GetValue($_) 
    } 
} 

輸出:

InstallDir 
C:\Program Files\Common Files\Apple\Apple Application Support\ 
UserVisibleVersion 
4.1.1 
Version 
4.1.1 
.... 

這是相當混亂,雖然。在PowerShell中輸出像這樣的數據的常用方法是創建一個包含Name和Value屬性的對象,以便每個註冊表值具有一個對象。這更容易處理(如果您打算將它用於腳本中的某些內容)並且更容易在控制檯中查看。

foreach ($a in $registry) { 
    $a.Property | Select-Object @{name="Value";expression={$_}}, @{name="Data";expression={$a.GetValue($_)}} 
} 

foreach ($a in $registry) { 
    ($a | Get-ItemProperty).Psobject.Properties | 
    #Exclude powershell-properties in the object 
    Where-Object { $_.Name -cnotlike 'PS*' } | 
    Select-Object Name, Value 
} 

輸出:

Value     Data 
-----     ---- 
InstallDir   C:\Program Files\Common Files\Apple\Apple Application Support\ 
UserVisibleVersion 4.1.1 
Version    4.1.1 
....