2016-12-15 1 views
0

저는 회사에 인턴을하고 있으며 클라이언트의 프린터 IP 스키마를 다시 정의해야합니다. Powershell ISE를 사용하고 있으며 사용하는 경우 Powershell ISE를 사용하고 있습니다.Powershell on 2012 PrintServer 특정 서브넷이있는 프린터 포트 검색

Get-PrinterPort 

나는 예상대로 전체 목록을 얻습니다. .

$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') 

아무것도 표시되지 않습니다 : 내가 192.168.228의 서브넷 세트 내의 모든 프린터 포트를 찾고 있어요 그러나, *, 나는 다음과 같은 사용했다.

Get-WmiObject -Class Win32_TCPIPPrinterPort -OutVariable allIPs 
    foreach ($splitIP in $allIPs -split '.'){ 
    $splitIP = $allIPs -split '.' 
    sort $splitIP[2] -Unique -OutVariable uniqueSubnetIP 
    } 
    $uniqueSubnetIP 
: 나는 또한에 스크립트를 수정 한

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

부분 IP 주소를 검색 할 -match, -icontains, -contains, -like 여러 다른 많은 변화를 시도했다

This is the output I get from the above code

궁극적으로,이 같은 범위에 넣어하는 서브넷 IP를 각각의를 통해 필터링하고 마지막 옥텟 스키마 외부에있는 사람을 찾아 프로세스를 자동화 할 :

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

당신이 제공 할 수있는 도움은 정말 감사합니다. 나는 이것에 대해 알아 내려고 노력했다.

+0

저는 처음 부분에 아무것도 표시하지 않았으므로 정확하게 말했던 것을 깨닫습니다. 나는 그게 아무것도하지 않았다는 것을 보여주기 위해 말하지 않았다. – brehma

+0

그럼 ..이 질문은 더 이상 적합하지 않습니까? 그렇다면 닫을 수 있습니다. 편집 옵션 근처에 있습니다. – gravity

+0

첫 번째 부분 만 더 관련성이 없어졌으며 하위 부분은 여전히 ​​적합합니다. – brehma

답변

0

먼저 서브넷 감지에 대해 $printerport.name을 신뢰할 수 없다고 생각합니다. 대신 $printerport.hostaddress을 사용하십시오.

Get-WMIObject -Class Win32_TCPIPPrinterPort | Where-Object {($_.HostAddress -split '\.')[2] -eq 228} 원하는 서브넷의 printerport 개체를 반환하는 것처럼 보입니다 - 다른 서브넷의 경우 228을 적절한 값으로 변경하기 만하면됩니다.

연산자 -split은 정규 표현식을 사용하므로 \.을 이스케이프 처리해야합니다. 이 작업은 포트의 IP 주소의 옥텟을 나타내는 네 개의 항목으로 구성됩니다. 세 번째 옥텟은 @()[2]입니다. 을 [0], [1] 또는 [3]으로 변경하여 유사하게 다른 옥텟을 테스트 할 수 있습니다.

+0

방금 ​​당신의 제안을 시도해 보았습니다. 그런 간단한 해결책에 너무 많은 시간을 보냈다는 것을 믿을 수 없습니다! 이것은 내가 필요로하는 것처럼 작동합니다. 질문을 따르십시오 ... 3 번째 옥텟을 $ subnetOct로 설정하고 20 번째 서브넷을 통과하여 4 번째 옥텟에서><|| brehma

+0

엄청나게 광범위한 후속 질문입니다. 여러 가지 방법이 있습니다. 귀하의 처리에 가장 적합한 질문이 될 것이며 귀하 만이이를 결정할 수 있습니다. 가장 가능성있는 방법은 배열 (예 :'$ thirds = @ (228, 241, 243, 250)')에 세 번째 옥텟을 할당 한 다음 배열을 반복하여 배열을 반복하는 것입니다 foreach 블록에서 처리 (예 :'foreach ($ octet in $ thirds) {...}', 원래 응답에서'$ octet'을'228'으로 대체). –

+0

답변으로 원래 문제가 해결 되었다면이를 수락하십시오. –

관련 문제