Добавление «нестандартного» значения в повторяющийся ArrayList - PullRequest
0 голосов
/ 22 мая 2018

В настоящее время я пишу скрипт для извлечения записей реестра из списка удаленных серверов и экспорта в CSV.

У меня есть это, и оно работает (я собираюсь очистить обработку ошибокпозже), но вывод не совсем то, что я хочу произвести, так как он плохо экспортируется в CSV.

$DataList = New-Object System.Collections.ArrayList
foreach ($Target in $ImportData) {
    Write-Host "Scanning" $Target.ComputerName ":" -NoNewline
    $RegData = Get-RegValue -ComputerName $($Target.ComputerName) -Hive $RegHive -Key $KeyName
    if (!$RegData) {
        Write-Host "No data found for" $Target.ComputerName
        [void]$DataList.Add([PSCustomObject]@{
            ComputerName = $Target.ComputerName
            Hive ="No Data"
            Key = ""
            Value = ""
            Data = ""
            Type = ""
        })
    } else {
        $DataList.Add($RegData)
        Write-Host "Done"
    }
}
$DataList

Вывод выглядит следующим образом:

ComputerName Hive            Key                  Value                     Data
------------ ----            ---                  -----                     ---
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... AssetNumber               987
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... BuildDate                 04/
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... iLODefaultPwd             NA
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... OwnerContactDetails       S G
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... OwnerName                 MS
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... OwnerPhone                643
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... PatchAutoManual           Aut
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... ServerRole                Man
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... ServerType                Vir
SERVER1   LocalMachine    SOFTWARE\CUSTOM\Serv... WarrantyExpires           NA

Value        :
Key          :
Data         :
Hive         : None found
Type         :
ComputerName : SERVER2

SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... buildDate                 15/
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... OperatingSystem           Win
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... OwnerContactDetails       M/S
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... OwnerName                 GM
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... OwnerPhone                131
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... PatchAutoManual           -
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... ServerRole                SNB
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... ServerType                Phy
SERVER3     LocalMachine    SOFTWARE\CUSTOM\Serv... WarrantyExpires           -

Iподозреваю, что два типа объектов различны, но я не слишком много пишу в сценарии, и у меня есть полный ментальный блок для того, чтобы заставить мои пользовательские записи соответствовать тем, которые извлекаются автоматически.

1 Ответ

0 голосов
/ 22 мая 2018

Get-RegValue (при условии, что вы используете командлет из модуля RemoteRegistry ) возвращает объект RegistryValue, тогда как ускоритель типа PSCustomObject, очевидно, создает объекты PSCustomObject.Например, вы можете проверить типы с помощью командлета Get-Member.

Эту проблему можно избежать, пропустив список по номеру Select-Object.Я бы тоже не стал использовать ArrayList.Просто соберите выходные данные цикла в переменную.

$DataList = foreach ($Target in $ImportData) {
    $RegData = Get-RegValue ...
    if ($RegData) {
        $RegData
    } else {
        [PSCustomObject]@{
            ComputerName = $Target.ComputerName
            Hive         = 'No Data'
            Key          = ''
            Value        = ''
            Data         = ''
            Type         = ''
        }
    }
}

$DataList |
    Select-Object ComputerName, Hive, Key, Value, Data, Type |
    Export-Csv ...

Шаг Select-Object превращает все входные объекты в пользовательские объекты с выбранными свойствами.

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