如何在没有管理员权限的服

时间:2016-12-16 20:23:59

标签: powershell printers

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

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

我试图使用Test-Path \\serverName\queueName无效(对我来说似乎是一个不错的选择,因为例如start \\serverName\queueName打开队列就好了。)

我怎样才能做到这一点?

编辑:我正在运行Windows 7而且我不知道哪些操作系统在服务器上运行(2008年,2012年可能)。

3 个答案:

答案 0 :(得分:1)

如果它们在Active Directory中发布,您可以查找printqueue对象:

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

编辑:

在未发布AD的情况下,您可以使用net view \\servername

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

答案 1 :(得分:0)

根据您的操作系统,这可能就像使用Get-Printer一样简单。

$NetworkQs = $ServerList | ForEach{Get-Printer -ComputerName $_ }

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

答案 2 :(得分:0)

这是我最终使用的。感谢@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            
------      -----                 -----------            
...         ...                   ...
...         ...                   ...