如何计时命令不超过30秒

时间:2015-04-25 09:24:54

标签: powershell

我写下以下代码工作正常 - 它将每个网卡设置为启用(并等待卡片有$StatusConnected=2)。

当我在所有服务器上将其推向生产时,我看到的问题是,将会有一些狡猾的服务器,它将无法将状态更改为2并且将永远循环以尝试将其设置为2。

任何人都知道如何在下面放一个计时器,这样如果它在30秒内没有改变2,那么移动到下一张卡?如果它还可以向我显示它失败的卡片,那将会很方便。

我是否添加了另一个Do并添加了-gt 30这样的计时器? - 不太清楚如何开始这样做所以任何想法都会有用 - 而且,很难测试,因为我的所有实验室服务器都可以正常启用NIC。

$listofNIcs = Get-WmiObject -Class Win32_NetworkAdapter -ComputerName . -filter "Name LIKE '%HP%' OR Name LIKE '%Broadcom%' OR NAME LIKE '%Intel%'"
$StatusConnected = $listofNIcs.NetConnectionStatus

Foreach ($disNICS in $listofNIcs) 
    { 
        Do {
            $disNICS.Enable()
            }
        Until($StatusConnected -eq "2")           

    }

1 个答案:

答案 0 :(得分:2)

我只是抓紧时间并在循环条件下进行比较。

Foreach ($disNICS in $listofNIcs) 
    {
        $StartTime = Get-Date; 
        Do {
            $disNICS.Enable()
            }
        Until(($StatusConnected -eq "2") -or (((Get-Date) - $StartTime).TotalSeconds -gt 30))

    }

注意:我原来在这里使用Seconds而不是TotalSeconds。你真的想要TotalSeconds。秒只是第二个组成部分,所以如果是5小时4分13秒,则秒数为13,而TotalSeconds为18253。