Итерация массива в команде для поиска дочерних элементов - PullRequest
0 голосов
/ 11 июля 2019

Я создал текстовый файл, содержащий дочерние элементы из родительской папки. Я удалил заголовок и вызвал файл. Я могу перебрать файл, но не могу выделить элементы в новом родительском каталоге.

#create txt for array
Get-Item -Path HKLM:\test\Software\Microsoft\Windows\Shell\Bags\* | Out-File C:\test\shell.txt
$files = "C:\test\shell.txt"
#removes header
get-content $files | select -Skip 7 | set-content "$files-temp"
move "$files-temp" $files -Force
#iterates array
Get-Content $files | ForEach-Object { Get-Item -Path HKLM:\test\Software\Microsoft\Windows\Shell\Bags\$_\* }

Мне нужно иметь возможность перебирать список и получать информацию внутри перебираемых папок.

Пример текущего выхода:

Hive: HKEY_LOCAL_MACHINE\TEST\Software\Microsoft\Windows\Shell\Bags


Name                           Property                                                                                                                
----                           --------                                                                                                                
1                                                                                                                                                      
10                                                                                                                                                     
11                                                                                                                                                     
12                                                                                                                                                     
13                                                                                                                                                     
14  

_____________________________________________________________________________ Решение

$filedir = "HKLM:\test\Software\Microsoft\Windows\Shell\Bags"
foreach($file in Get-ChildItem -Recurse $filedir){
    echo $file >> "C:\test\shell.csv" 
}

1 Ответ

1 голос
/ 15 июля 2019

На самом деле, мне не нравится, как 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...