2012-12-15 2 views
0

좋아,이 스크립트를 작동 시키려고하고 있고 계속해서 동일한 컴퓨터를 반복해서 실행하지 못하고 작동하는데 문제가 있습니다. 나는 이것이 최선의 방법이라고 생각하지 않으며 만약 당신이 제안을 해주시면 감사하겠습니다. 어쨌든 6 행의 "IF (! $ Succssful.Contains ($ Computer)) {"이 문제는 아니지만 나에게 오류가 발생하지는 않지만 대신 스크립트는 끝납니다. 나는 "!" 그러나 내가 예상했던 것에 따라 어떤 운도.Powershell 문자열에 대한 .contains 함수와 관련된 문제

$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 
       } 
      } 
     } 
    } 
} 
+0

이 컴퓨터를 실행할 컴퓨터가 많은 경우 Invoke-Command를 포함하여 모든 컴퓨터에서 병렬로 실행하는 것이 좋습니다. hotfix.csv를 공용 네트워크 공유에 저장해야합니다. Invoke-Command -Computername test1, test2 -ScriptBlock {your script}는 모든 출력 호스트 메시지를 단일 출력으로 반환하여 파일에 저장할 수 있습니다. –

+1

btw. while ($ successful)은 ..입니다. string []이 성공적이지 않습니다. 또한 컴퓨터리스트가 성공한 것이기 때문에 핫픽스 루프 밖에서'$ successful + = $ computer'를 옮기고 싶을 것입니다. (step out에서) 이제 각 핫픽스 테스트에 컴퓨터 이름이 추가 되었기 때문입니다 –

+0

여기서'$ 성공적으로 정의 된? 우리가 당신 스크립트 중 일부를 놓친 것 같아요. –

답변

0

이 줄

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

$ true로 평가 할 수 없다. 존재하지 않는 변수 ($ Successful)의 .count -property는 $ null이며 문자열에 대해서도 마찬가지입니다 (컴퓨터가 하나만 지정되었으므로 배열이 아닙니다).

Powershell이 ​​"실제"항목 수를 반환하도록하려면 대신 @($Successful).count@($Computers).count을 사용하십시오. $ Computers가 배열로 정의되지 않은 경우에도 1을 제공합니다. 변수는 대체 당신이 here을 읽을 수 그래서, 당신의 라인, 파워 쉘 3에서

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

로 해석됩니다, 더 이상 문제 될 것은 없습니다.