2016-12-16 48 views
0

我希望列出PowerShell中的打印服务器列表上的所有打印机队列(或必要时包装的本地cmd命令)。如何在没有管理员权限的情况下在服务器上列出共享打印机

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

我试图使用Test-Path \\serverName\queueName无济于事(似乎是一个很好的选择,因为例如start \\serverName\queueName打开队列就好了)。

我该如何做到这一点?

编辑:我正在运行Windows 7,我不知道哪个操作系统在服务器上运行(2008年,2012年也许)。

回答

1

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

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

编辑:

而不AD发布,那么你可以从SMB共享一一列举了点和打印队列使用net view \\servername

+0

不幸的是,他们不是。我希望... – sodawillow

+0

该死的,错过了编辑。我认为你找到了一个方法:)。 – sodawillow

0

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

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

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

+0

我使用Windows 7。我将在增加的问题。 – sodawillow

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    
------  -----     -----------    
...   ...     ... 
...   ...     ... 
相关问题