スクリプトは正常に機能し、サーバー上のプリンターを切り替えて、プリンターが共有されているかどうかを判断します(TRUE)。ただし、サーバー上の最後のプリンターが共有されていない場合に問題が発生し、共有が(False)に変更されます。これは、サーバーがプリントサーバーではないがプリントサーバーではないことを示すスプレッドシートの結果を歪めます。サーバー上で共有プリンターが1つ見つかった場合は、検索を停止して、プリントサーバーとしてフラグが付けられたスプレッドシートにサーバーを配置するというループを作成する必要があります。
$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}
}