PowerShell在2012年PrintServer上搜索具有某些子网的打印机端口



我正在一家公司实习,我们需要重新定义客户的打印机IP模式。我与PowerShell相当绿色,我正在使用Powershell iSe,当我使用时:

    Get-PrinterPort

我从预期获得完整列表。但是,如果我正在寻找192.168.228的子网集中的任何打印机端口。*,我使用了以下内容:

    $IPAddress = Get-WmiObject -Class Win32_TCPIPPrinterPort | Where-Object ({$_.Name.Split('.').index[-1]} -eq '228')
    $IPAddress = Get-WmiObject -Class Win32_TCPIPPrinterPort | Where-Object ({$_.Name.Split('.')} -match '192.168.228*')
    $IPAddress = Get-WmiObject -Class Win32_TCPIPPrinterPort | Where-Object ({$_.Name.Split('.').index[-1]} -match '228')

什么都不会显示。我尝试了-Match,-icontains,-contains,-y -like和其他一些将搜索部分IP地址的变体

    $IPAddress = Get-WmiObject -Class Win32_TCPIPPrinterPort | Where-Object ({$_.Name.Split('.')} -match '*228')

我还将脚本修改为:

Get-WmiObject -Class Win32_TCPIPPrinterPort -OutVariable allIPs
  foreach ($splitIP  in $allIPs -split '.' ){
    $splitIP = $allIPs -split '.'
    sort $splitIP[2] -Unique -OutVariable uniqueSubnetIP
    }
    $uniqueSubnetIP

这是我从上面代码中获得的输出

最终,我想过滤透过每个子网IP,并找到最后一个八位位置在模式外的地方,并自动化一个过程以将它们放置在这样的范围内:

< 192.268.***.50 || > 192.168.***.60 

您可以提供的任何帮助都非常感谢;我花了几天的时间试图解决这个问题。

首先,我不认为$printerport.name可靠地检测子网;改用$printerport.hostaddress

Get-WMIObject -Class Win32_TCPIPPrinterPort | Where-Object {($_.HostAddress -split '.')[2] -eq 228}似乎返回所需子网中的打印机对象 - 对于其他子网,只需将228更改为适当的值。

-split操作员采用正则表达式,因此.必须逃脱,.。该操作将导致四个项目的数组,代表端口的IP地址的八位字。第三个八位位于@()[2]中;您可以通过将[2]更改为[0][1][3]

最新更新