Цикл ForEach над строкой в ​​powershell - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь найти все последние статусы заданий из списка виртуальных машин, зарезервированных с помощью veeam backup.Странно, петли не переходят на следующий вм.Вот что я делаю:

Add-PSSnapin VeeamPSSnapin
$VMlist = "vm1, vm2" 
$VMlist = $VMlist.split(",");
Foreach ($i in $VMlist) {

    foreach($Job in (Get-VBRJob))
{
        $Session = $Job.FindLastSession()
        if(!$Session){continue;}
        $Tasks = $Session.GetTaskSessions()
        $Tasks | ?{$_.Name -eq $VMlist} | %{write-host $_.Name ":" $_.Status}

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

Заранее спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Вы ищете массив $VMList в $Tasks, а не отдельную виртуальную машину $i, просто измените: {$_.Name -eq $i}

Также ваши имена виртуальных машин будут содержать начальные пробелы, либо удалите пробелыиз вашей входной строки "vm1,vm2", или используйте Trim() после Split()

Add-PSSnapin VeeamPSSnapin
$VMlist = "vm1,vm2" 
$VMlist = $VMlist.split(",");
foreach ($i in $VMlist) {
    foreach ($Job in (Get-VBRJob)) {
        $Session = $Job.FindLastSession()
        if (!$Session) {continue; }
        $Tasks = $Session.GetTaskSessions()
        $Tasks | Where-Object {$_.Name -eq $i} | ForEach-Object {Write-Host $_.Name ":" $_.Status}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...