Пытаетесь создать собственный список объектов? хэш? - не уверен

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

Clear-Host
Add-PSSnapin citrix* -ErrorAction SilentlyContinue

$DRSrvs = Get-XAServer drptsw00* | select -ExpandProperty servername
$hash = $null
$hash = @{}

foreach ($DR in $DRSrvs) {
    $hash = New-Object PsObject -Property @{
        servername = $DR
        Logins = (Get-XALoadEvaluator -ServerName $DR).LoadEvaluatorName
    }
}

2 ответа

Хеш-таблица предназначена для сопоставления (уникальных) ключей со значениями. Если вам нужно сопоставить разные имена серверов с именами входа, используйте хеш-таблицу, в противном случае используйте пользовательские объекты. В любом случае вам нужно правильно обрабатывать структуры данных.

Хеш-таблица:

$hash = @{}

foreach ($DR in $DRSrvs) {
    $hash[$DR] = (Get-XALoadEvaluator -ServerName $DR).LoadEvaluatorName
}

Пользовательский список объектов:

$list = foreach ($DR in $DRSrvs) {
    New-Object PsObject -Property @{
        servername = $DR
        Logins = (Get-XALoadEvaluator -ServerName $DR).LoadEvaluatorName
    }
}

Присвоение чего-либо переменной в цикле заменяет предыдущее значение в этой переменной при каждой итерации, оставляя вам только последнее значение после завершения цикла.

Я использовал этот метод и получил очень чистый вывод. Citrix SDK для Powershell, если он очень забавный и имеет много ошибок.

Clear-Host
Add-PSSnapin citrix* -ErrorAction SilentlyContinue    

$OutputData = $null
$OutputData = @()
$Srvs = Get-XAServer Srv123* | Select-Object -ExpandProperty ServerName
$object = New-Object PSObject
Add-Member -InputObject $object -MemberType NoteProperty -Name Servername -Value ""
Add-Member -InputObject $object -MemberType NoteProperty -Name LoadEval -Value ""

foreach ($Srv in $Srvs) { 
    $servername= $Srv
    $LoadEval = ((Get-XALoadEvaluator -ServerName $Srv).LoadEvaluatorName)
    $appObject = New-Object System.Object
    $appObject |
        Add-Member -MemberType NoteProperty -Name "ServerName" -Value $servername -PassThru |
        Add-Member -MemberType NoteProperty -Name "LoadEval" -Value $LoadEval
    $outputData += $appObject
}
Другие вопросы по тегам