0

OK、私はこのスクリプトを機能させようとしていますが、同じコンピューターに何度も何度もヒットするのではなく、機能させるのに問題があります。これが最善の方法だとは思いません。何か提案があれば、よろしくお願いします。とにかく、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
                }
            }
        }
    }
}
4

1 に答える 1

0

この行

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

$true に評価されることはありません。存在しない変数 ($Successful)の.count-property は $null であり、同じことが文字列にも当てはまります (1 台のコンピューターのみを指定しているため、配列ではありません)。

Powershell に「真の」アイテム数を返すように強制するには、代わりに@($Successful).countand を使用し@($Computers).countます。$Computers が配列として定義されていない場合でも、これにより 1 が返されます。したがって、変数を置換すると、行は次のように解釈されます

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

ここで読むことができるように、Powershell 3では、これはもはや当てはまりません。

于 2013-03-29T13:30:57.213 に答える