На самом деле, мне не нравится, как powershell так много делает в реестре. Вот скрипт с именем "get-itemproperty2.ps1":
param([parameter(ValueFromPipeline)]$key)
process {
$valuenames = $key.getvaluenames()
if ($valuenames) {
$valuenames | foreach {
$value = $_
[pscustomobject] @{
Path = $key -replace 'HKEY_CURRENT_USER',
'HKCU:' -replace 'HKEY_LOCAL_MACHINE','HKLM:'
Name = $Value
Value = $Key.GetValue($Value)
Type = $Key.GetValueKind($Value)
}
}
} else {
[pscustomobject] @{
Path = $key -replace 'HKEY_CURRENT_USER',
'HKCU:' -replace 'HKEY_LOCAL_MACHINE','HKLM:'
Name = ''
Value = ''
Type = ''
}
}
}
Имея это, вы можете сделать:
get-item HKLM:\Software\Microsoft\Windows\currentversion\run | get-itemproperty2
Path Name Value Type
---- ---- ----- ----
HKLM:\Software\Microsoft\Windows\currentversion\run SecurityHealth C:\Program Files\Windows Defender\MSASCuiL.exe ExpandString
HKLM:\Software\Microsoft\Windows\currentversion\run DagentUI C:\Program Files\Altiris\Dagent\dagentui.exe String
HKLM:\Software\Microsoft\Windows\currentversion\run KeyAccess kass.exe String
Вы можете легко экспортировать это в CSV. Обратите внимание, что я использовал get-item для получения ключевых свойств верхнего уровня. get-childitem даже не может этого сделать. Но вы можете передать get-childitem -recurse в get-itemproperty2.