确定服务器是否是打印服务器

时间:2012-11-23 03:54:35

标签: powershell if-statement powershell-v2.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 个答案:

答案 0 :(得分: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