如何在没有管理员权限的情况下列出服务器上的共享打印机

How list shared printers on server without admin rights

我希望在 PowerShell 中的打印服务器列表中列出所有打印机队列(如有必要,也可以包装本机 cmd 命令)。

这里的困难是我没有服务器的管理员权限,所以我不能使用 WMI 来查询它们。

我尝试使用 Test-Path \serverName\queueName 无济于事(对我来说似乎是一个不错的选择,因为例如 start \serverName\queueName 可以很好地打开队列)。

我怎样才能做到这一点?

编辑:我是 运行 Windows 7,我不知道哪个 OS 在服务器上运行(可能是 2008 年、2012 年)。

根据您的 OS 这真的可以像使用 Get-Printer.

一样简单
$NetworkQs = $ServerList | ForEach{Get-Printer -ComputerName $_ }

我认为这在 Win8 之前不可用,也许是 8.1。

如果它们在 Active Directory 中发布,您可以查找打印队列对象:

Get-ADObject -LDAPFilter "(objectCategory=printQueue)"

编辑:

如果不发布 AD,那么您可以使用 net view \servername

从指向和打印队列的 SMB 共享中枚举它们

这就是我最终使用的。感谢@BenH,没有想到 net 命令。

$servers = "printer01", "printer02"

$servers |
    ForEach-Object {
        $server = $_
        net view \$server |
            Where-Object { $_ -match "Print" } |
            ForEach-Object {
                $parts = $_ -split "\s{2,}"
                $item = New-Object PSObject
                $item | Add-Member -MemberType NoteProperty -Name Server -Value $server
                $item | Add-Member -MemberType NoteProperty -Name Queue -Value "\$server$($parts[0])"
                $item | Add-Member -MemberType NoteProperty -Name Description -Value $parts[2]
                $item
            }
    }

输出:

Server      Queue                 Description            
------      -----                 -----------            
...         ...                   ...
...         ...                   ...