2012-11-23 126 views
0

該腳本正常工作,並將切換服務器上的打印機並確定打印機是否共享(TRUE)。但是,如果服務器上的最後一臺打印機恰好不被共享,則會出現問題,然後將共享更改爲(False)。這在電子表格中歪曲了結果,表明服務器不是打印服務器,儘管它是。我需要做一些如何創建一個循環,指出如果我們在服務器上找到一臺共享打印機,請停止搜索並將服務器放入標記爲打印服務器的電子表格中。確定服務器是否爲打印服務器

我想提出的類似 $Printers = gwmi Win32_Printer -computername $StrComputer if ($printers.shared -eq "True){# then stop searching that machine and place it in the speadsheet as a print server} 這裏是我的代碼:

foreach ($StrComputer in $colComputers){ 
      $Printers = gwmi Win32_Printer -computername $StrComputer 
      $GenItems1 = gwmi Win32_OperatingSystem -Comp $StrComputer 

    # Populate Printer Sheet with information 
     foreach ($objItem in $GenItems1){ 
      $Sheet1.Cells.Item($intRow, 1) = $StrComputer 
      $Sheet1.Cells.Item($intRow, 2) = $objItem.Caption 
      $Sheet1.Cells.Item($intRow, 3) = $objItem.CSDVersion 
      } 

     foreach ($objItem in $Printers){ 
      $Sheet1.Cells.Item($intRow, 4) = $objItem.Shared 

      } 

     $de = New-Object System.DirectoryServices.DirectoryEntry 
     $ds = New-Object System.DirectoryServices.DirectorySearcher 
     $ds.SearchRoot = $de 
     $ds.Filter = "(&(objectCategory=computer)(objectClass=computer)(samAccountName=$($StrComputer)$))" 
     $ds.SearchScope = "SubTree" 
     $r = $ds.FindOne() 
     $r.Path 
     $Sheet1.Cells.Item($intRow, 5) = $r.Path 

      $intRow = $intRow + 1} 
    } 

回答

1

改變這一點:

foreach ($objItem in $Printers){ 
      $Sheet1.Cells.Item($intRow, 4) = $objItem.Shared 
      } 

與此:

$isprinterserver = $false 
$printers | % { if ($_.shared -eq $true) { $isprinterserver = $true; break} } 
$Sheet1.Cells.Item($intRow, 4) = $isprinterserver 
+0

感謝您的快速回應基督徒。我把代碼放在這裏,但它不會產生所需的結果。它看起來像掛在第一臺服務器上,從不真正產生第一臺服務器的真/假結果。 – NobleMan

+0

如果我再次將您的代碼放入foreach中,我確實會得到第二臺服務器以顯示除$ objItem.Shared值之外的所有值。這兩個都保持空白。 – NobleMan

+0

當我拿出break命令時,這確實起作用。 – NobleMan