我正在公司实习,我们需要重新定义客户的打印机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
非常感谢您提供的任何帮助;我花了好几天试图解决这个问题。
答案 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]
来类似地测试其他八位字节。