Попытка получить доступ к каждому элементу из объектов части массива с помощью PowerShell - PullRequest
0 голосов
/ 08 июля 2019

Я не могу получить список каждого элемента Key и Value из объекта, который является частью массива.

Я добавил объекты в массив, как вы можете видеть из кода, но япросто не смог получить $ finalList как хотел.

$date = Get-Date
$userInfo = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'"

$userAccount = New-Object System.Collections.ArrayList
foreach ($user in $userInfo) {
    $userAccount += (@{
        "Name"=$user.Name;
        "Status"=$user.Status;
        "Disabled"=$user.Disabled;
        "AccountType"=$user.AccountType;
        "Lockout"=$user.Lockout;
        "PasswordRequired"=$user.PasswordRequired;
        "PasswordChangeable"=$user.PasswordChangeable;
        "SID"=$user.SID;
    })
}

foreach ($item in $userAccount) {
    $temp = New-Object System.Object
    $temp | Add-Member -MemberType NoteProperty -Name "Date" -Value "$date"
    $temp | Add-Member -MemberType NoteProperty -Name "Hostname" -Value "$env:computername"
    $temp | Add-Member -MemberType NoteProperty -Name "Key" -Value "$($item.Keys)"
    $temp | Add-Member -MemberType NoteProperty -Name "Value" -Value "$($item.Values)"
    $finalList.Add($temp) | Out-Null
}

С $ finalList я хочу получить столбец для даты, для имени хоста и еще два столбца с ключами и значениями из массива $ userAccount.$ finalList будет экспортирован в CSV.

Ответы [ 2 ]

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

это сработало для меня.ваш код, кажется, работает, кроме того факта, что вы не объявили второго массива.

$date = Get-Date
$userInfo = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'"

$userAccount = New-Object System.Collections.ArrayList
foreach ($user in $userInfo) {
    $userAccount += (@{
        "Name"=$user.Name;
        "Status"=$user.Status;
        "Disabled"=$user.Disabled;
        "AccountType"=$user.AccountType;
        "Lockout"=$user.Lockout;
        "PasswordRequired"=$user.PasswordRequired;
        "PasswordChangeable"=$user.PasswordChangeable;
        "SID"=$user.SID;
    })
}


$finalList = New-Object System.Collections.ArrayList
foreach ($item in $userAccount) {
    $temp = New-Object System.Object
    $temp | Add-Member -MemberType NoteProperty -Name "Date" -Value "$date"
    $temp | Add-Member -MemberType NoteProperty -Name "Hostname" -Value "$env:computername"
    $temp | Add-Member -MemberType NoteProperty -Name "Key" -Value "$($item.Keys)"
    $temp | Add-Member -MemberType NoteProperty -Name "Value" -Value "$($item.Values)"
    $finalList.Add($temp) | Out-Null
}


$finalList | Export-Csv 'C:\path\to\file.csv' -NoTypeInformation
0 голосов
/ 09 июля 2019

PowerShell автоматически установит $ finalList в качестве списка массивов, но лучше объявить его, потому что по какой-то причине он не ведет себя так же, хотя $ finalList.GetType () будет давать те же результаты.Перечисление hashstable $ item позволит мне получить пары ключ / значение по желанию.

$finalList = New-Object System.Collections.ArrayList
foreach ($item in $userAccount) {
    $item.GetEnumerator() | ForEach-Object {
        $temp = New-Object System.Object
        $temp | Add-Member -MemberType NoteProperty -Name "Date" -Value "$date"
        $temp | Add-Member -MemberType NoteProperty -Name "Hostname" -Value "$env:computername"
        $temp | Add-Member -MemberType NoteProperty -Name "Key" -Value $_.Key
        $temp | Add-Member -MemberType NoteProperty -Name "Value" -Value $_.Value
        $finalList.Add($temp) | Out-Null
    }
}

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