0

スクリプトは正常に機能し、サーバー上のプリンターを切り替えて、プリンターが共有されているかどうかを判断します(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}
    }
4

1 に答える 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
于 2012-11-23T06:11:47.363 に答える