本文介绍如何使用 PowerShell 获取特定服务器上的新安装打印机,并排除已知打印机。我们将使用排除列表来过滤已知的打印机,并使用 Get-Printer
命令来获取所有打印机信息。
使用场景
假设你需要定期检查特定服务器群组中是否有新安装的打印机,并将其添加到你的排除列表中。需要一种方法来快速识别新打印机,并更新排除列表。
操作步骤
- 获取服务器列表: 使用
Get-ADComputer
命令获取所有符合特定模式的服务器。例如,你可以使用Where Name -Like 'SC-PS-0*'
来获取所有以SC-PS-0
开头的服务器。
$PrinterServers = Get-ADComputer -f * | Where Name -Like 'SC-PS-0*'
- 读取排除列表: 使用
Get-Content
命令从文本文件读取已知打印机的名称。
$ExcludeList = Get-Content .\myExcludedPrinters.txt
- 获取所有打印机信息: 使用
Get-Printer
命令获取所有服务器上的打印机信息。使用ForEach
循环遍历每个服务器,并使用-ComputerName
参数指定服务器名称。
$PrinterReport = ForEach($ps in $PrinterServers) {
Get-Printer -ComputerName $ps.Name
}
- 过滤已知打印机: 使用
Where
语句来过滤已知打印机和重定向打印机。-notlike
操作符用于匹配不包含特定字符串的打印机名称,例如*Redirected*
。-notin
操作符用于排除出现在排除列表中的打印机名称。
$PrinterReport = ForEach($ps in $PrinterServers) {
Get-Printer -ComputerName $ps.Name |
Where {$_.Name -notlike '*Redirected*' -and $_.Name -notin $ExcludeList}
}
- 选择所需属性: 使用
Select
语句选择你需要的打印机属性,例如ComputerName
,Name
,PortName
,Location
,Comment
,Shared
等。
$PrinterReport = ForEach($ps in $PrinterServers) {
Get-Printer -ComputerName $ps.Name |
Where {$_.Name -notlike '*Redirected*' -and $_.Name -notin $ExcludeList} |
Select ComputerName, Name, PortName, Location, Comment, Shared
}
- 输出结果: 现在可以使用
$PrinterReport
变量访问新安装的打印机信息。可使用Write-Host
命令输出结果,也可以将结果保存到另一个文本文件或数据库。
完整示例代码
# 获取服务器列表
$PrinterServers = Get-ADComputer -f * | Where Name -Like 'SC-PS-0*'
# 读取排除列表
$ExcludeList = Get-Content .\myExcludedPrinters.txt
# 获取所有打印机信息并过滤已知打印机
$PrinterReport = ForEach($ps in $PrinterServers) {
Get-Printer -ComputerName $ps.Name |
Where {$_.Name -notlike '*Redirected*' -and $_.Name -notin $ExcludeList} |
Select ComputerName, Name, PortName, Location, Comment, Shared
}
# 输出结果
Write-Host "新安装的打印机:"
$PrinterReport
解释:
-notmatch
操作符用于匹配包含特定字符串的字符串。-notin
操作符用于检查一个字符串是否不在另一个字符串数组中。
使用 -notin
操作符而不是 -notmatch
以及 -Join
操作符可以简化代码并提高效率。 这是一种更简洁、更易读的方法。