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

Powershell 确定服务器是否为打印服务器,powershell,if-statement,powershell-2.0,Powershell,If Statement,Powershell 2.0,该脚本工作正常,将在服务器上的打印机之间切换,并确定打印机是否共享(TRUE)。但是,如果服务器上的最后一台打印机碰巧没有共享,则会出现问题,然后将共享打印机更改为(False)。这会扭曲电子表格中的结果,说明该服务器虽然是打印服务器,但不是打印服务器。我需要了解如何创建一个循环,说明如果我们在服务器上找到一台共享打印机,请停止搜索并将服务器放置在标记为打印服务器的电子表格中 我想加入一些类似于 $Printers=gwmi Win32_打印机-computername$StrComputer

该脚本工作正常,将在服务器上的打印机之间切换,并确定打印机是否共享(TRUE)。但是,如果服务器上的最后一台打印机碰巧没有共享,则会出现问题,然后将共享打印机更改为(False)。这会扭曲电子表格中的结果,说明该服务器虽然是打印服务器,但不是打印服务器。我需要了解如何创建一个循环,说明如果我们在服务器上找到一台共享打印机,请停止搜索并将服务器放置在标记为打印服务器的电子表格中

我想加入一些类似于
$Printers=gwmi Win32_打印机-computername$StrComputer
如果($printers.shared-eq“True){#那么停止搜索该机器
并将其作为打印服务器}
这是我的密码:

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}
    }
更改此项:

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

感谢您的快速响应。我像您在这里一样输入了代码,但它没有生成所需的结果。它似乎挂起在第一台服务器上,并且从未实际为第一台服务器生成正确/错误的结果。如果我再次将您的代码输入到foreach,我会让第二台服务器显示除$objItem之外的所有值.共享值。这两个值上都为空。