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