Powershell问题.contains函数用于字符串

时间:2012-12-15 03:47:35

标签: powershell powershell-v2.0 powershell-v1.0

好的,我正在努力让这个脚本工作,而不是一遍又一遍地连续点击相同的计算机,并且无法正常工作。我不认为这是最好的方法,如果您有任何建议,请谢谢。无论如何,第6行似乎存在问题“IF(!$ Succssful.Contains($ Computer)){”它不会向我发送错误,而是以成熟的方式结束脚本。我试过删除“!”但没有我预期的运气。

$Computers = "TrinityTechCorp"
$HotFixes = Get-Content HotFixes.csv

While ($Successful -AND $Successful.count -ne $Computers.count) {
    ForEach ($Computer in $Computers) {
        IF (!$Succssful.Contains($Computer)) {
            If (Test-Connection $Computer) {
                $Comparison = get-hotfix -ComputerName $Computer | Select -expand HotFixID
                ForEach ($HotFix in $HotFixes) {
                IF ($Comparison -NotLike "*$HotFix*") {
                    Write-Host "$Computer missing $HotFix"
                }
                $Successful += $Computer
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这一行

While ($Successful -AND $Successful.count -ne $Computers.count) {

永远无法评估为$ true。不存在的变量($ Successful)的.count - 属性是$ null,对于一个字符串也是如此(因为你只指定了一台计算机,它不是一个数组)。

强制Powershell返回" true"项目数量,请改用@($Successful).count@($Computers).count。这将给你1,即使$ Computers没有定义为数组。因此,在替换变量的情况下,您的行将被解释为

While ($null -AND $null.count -ne $null) {

在Powershell 3中,您可以阅读here,但情况已不再如此。