我希望在PowerShell中列出打印服务器列表中的所有打印机队列(如果需要,还要包装本机cmd命令)。
这里的困难在于我没有服务器的管理员权限,所以我不能使用WMI来查询它们。
我试图使用Test-Path \\serverName\queueName
无效(对我来说似乎是一个不错的选择,因为例如start \\serverName\queueName
打开队列就好了。)
我怎样才能做到这一点?
编辑:我正在运行Windows 7而且我不知道哪些操作系统在服务器上运行(2008年,2012年可能)。答案 0 :(得分:1)
如果它们在Active Directory中发布,您可以查找printqueue对象:
Get-ADObject -LDAPFilter "(objectCategory=printQueue)"
编辑:
在未发布AD的情况下,您可以使用net view \\servername
答案 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
------ ----- -----------
... ... ...
... ... ...