Powershell on 2012 PrintServer搜索包含某些子网的打印机端口

时间:2016-12-15 19:06:29

标签: powershell split ip-address

我正在公司实习,我们需要重新定义客户的打印机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,-tatains,-contains,-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

This is the output I get from the above code

最终,我希望过滤每个子网IP并找到最后一个八位字节在模式之外的那些IP,并自动化一个过程,将它们放在这样的范围内:

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

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

1 个答案:

答案 0 :(得分:0)

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

Get-WMIObject -Class Win32_TCPIPPrinterPort | Where-Object {($_.HostAddress -split '\.')[2] -eq 228}似乎返回您想要的子网中的printerport对象 - 对于不同的子网,只需将228更改为适当值即可。

-split运算符采用正则表达式,因此.必须转义\.。该操作将产生一个包含四个项目的数组的数组,表示该端口的IP地址的八位字节。第三个八位位于@()[2];您可以通过将[2]更改为[0][1][3]来类似地测试其他八位字节。