Несколько переменных в цикле Foreach [PowerShell] - PullRequest
5 голосов
/ 17 октября 2011

Возможно ли вывести две переменные в цикл Foreach?

Следующее кодируется для PowerShell ASP.Синтаксис в моем цикле Foreach неверен, но вы сможете расшифровать логику, которую я пытаюсь сделать.

$list = Get-QADUser $userid -includeAllProperties | Select-Object -expandproperty name
$userList = Get-QADUser $userid -includeAllProperties | Select-Object -expandproperty LogonName
if ($list.Count -ge 2)
{
    Write-host "Please select the appropriate user.<br>"
    Foreach ($a in $list & $b in $userList)
    {
        Write-host "<a href=default.ps1x?UserID=$b&domain=$domain>$b - $a</a><br>"}
    }
}

Ответы [ 2 ]

11 голосов
/ 17 октября 2011

Кристиан отвечает тем, что вы должны делать в вашей ситуации. Нет необходимости получать два списка. Помните одну вещь в PowerShell - работайте с объектами до последнего шага. Не пытайтесь получить их свойства и т. Д. До тех пор, пока вы их фактически не используете.

Но в общем случае, когда у вас есть два списка, и вы хотите иметь Foreach над двумя:

Вы можете сделать то, что делает Foreach самостоятельно:

$a = 1, 2, 3
$b = "one", "two", "three"

$ae = $a.getenumerator()
$be = $b.getenumerator()

while ($ae.MoveNext() -and $be.MoveNext()) {
    Write-Host $ae.current $be.current
}

Или используйте обычный цикл for с $a.length и т. Д.

6 голосов
/ 17 октября 2011

Попробуйте, как показано ниже.Вам совсем не нужны две переменные:

$list = Get-QADUser $userid -includeAllProperties 
if ($list.Count -ge 2)
{
    Write-Host "Please select the appropriate user.<br>"
    Foreach ($a in $list)
    {
        Write-Host "<a href=default.ps1x?UserID=$a.LogonName&domain=$domain>$a.logonname - $a.name</a><br>"
    }  
}
...