ForEach循环遍历Powershell中的字符串

时间:2019-02-12 08:35:29

标签: powershell

我正在尝试从使用veeam备份备份的VM列表中找到所有最近的作业状态。 奇怪的是,循环不会转到下一个虚拟机。这是我的工作:

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 :(得分:0)

您要在$VMList中寻找$Tasks数组,而不是单个VM $i,只需更改:{$_.Name -eq $i}

您的VM名称也将包含前导空格,或者从输入字符串"vm1,vm2"中删除空格,或者在Split()之后使用Trim()

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}
    }
}