IT 관리자는 PowerShell과 명령 줄을 사용하여 많은 작업을 수행할 수 있습니다. Windows 네트워킹과 관련된 작업도 이에 포함됩니다. 이 튜토리얼에서는 Get-NetIPAddress
cmdlet과 WMI를 사용하여 Windows 컴퓨터의 네트워크 어댑터에서 IP 주소를 가져오는 방법을 배우게 될 것입니다.
전제 조건
이 튜토리얼은 Windows PowerShell v5.1이 설치된 Windows 10 이상의 컴퓨터를 기준으로 합니다. 또한 Active Directory 환경에 있다고 가정합니다. 그렇지 않은 경우 New-CimSession
cmdlet의 Credential
속성에 대해 알아보십시오.
Get-NetIPAddress
사용하기
파워셸에는 네트워크 연결을 다루는 다양한 cmdlet이 있습니다. 예를 들어 Get-NetAdapter
, Get-NetAdapterBinding
, 그리고 IP 주소를 찾는 데 사용되는 특정한 하나인 Get-NetIPAddress
등이 있습니다. 파워셸을 사용하여 간단한 스크립트로 IP 주소를 가져오고 싶다면, 이러한 cmdlet을 사용하십시오.
간단하게 유지하세요. 파워셸이 더 간단한 방법을 제공한다면, 그것을 사용하세요!
예를 들어, 로컬 컴퓨터의 모든 네트워크 어댑터에서 IPv4 주소를 찾으려면 단일한 줄을 실행하면 됩니다.

위의 출력은 이더넷 어댑터와 같은 특정 네트워크 어댑터를 참조하고 IP 주소만 반환합니다.

끝났습니다! 단순히 파워셸을 사용하여 IP 주소를 가져오는 것은 간단한 과정입니다. 적어도 다른 수단을 사용하는 것보다 훨씬 더 간단합니다.
파워셸을 좋아하지 않는다면, IP 주소를 가져오기 위해 ipconfig 명령을 사용할 수도 있습니다. ipconfig에 대해 자세히 알아보려면 알아야 할 Ipconfig 명령어를 참조하세요.
CIM/WMI를 사용하는 이유는 무엇인가요?
예를 들어, 원격 Windows 컴퓨터의 운영 체제를 확인하고 싶을 수 있습니다. CIM은 Win32_OperatingSystem 클래스 내의 Caption 속성에 운영 체제 이름을 보관합니다. 이 정보를 얻으려면 아래의 Get-CimInstance
cmdlet을 사용하고 컴퓨터 이름(REMOTECOMPUTER
), CIM 클래스(Win32_OperatingSystem
) 및 객체의 Caption
속성만 참조하도록 지정합니다.
Get-CimInstance
를 실행하면 PowerShell은 원격 컴퓨터를 찾아 로그인 자격 증명을 전달하고 필요한 정보를 얻기 위해 CIM에 쿼리해야 합니다. 세션 없이 Get-CimInstance
을 실행하는 데는 많은 오버헤드가 발생합니다.
서버 인벤토리 스크립트를 작성하고 저장소, 메모리, 네트워킹 등의 정보를 찾으려고 할 때는 어떻게 할까요? 이 경우에는 아래와 같이 Get-CimInstance
명령을 여러 번 사용하게 됩니다.
위의 코드 스니펫에서 스크립트는 REMOTECOMPUTER
에 네 번 연결됩니다. 그리고 컴퓨터 이름이 변경된다면 어떻게 될까요? 그 컴퓨터 이름을 찾아 바꿔야 하는 번거로움이 생길 것입니다. 코딩 중에 이런 일이 생기는 것은 좋지 않은 조짐입니다.
CIM 세션 생성
세션과 함께 Get-CimInstance
를 사용하는 대신, New-CimSession
cmdlet을 사용하여 하나의 CIM 세션을 생성하고 그 세션을 반복해서 재사용해야 합니다.
대신에 계속해서 원격 컴퓨터에 인증하는 대신에, New-CimSession
을 사용하여 단일 CIM 세션을 생성하고 이 세션을 Get-CimInstance
에 전달하세요.
세션 사용이 끝나면 연결을 해제하고 메모리에서 제거하세요.
위와 같은 방식으로 CIM 세션을 사용하는 것은 CIM/WMI 작업에 효과적인 방법입니다.
적절한 네트워크 어댑터 찾기
Windows 컴퓨터는 여러 네트워크 어댑터를 가질 수 있기 때문에 먼저 어떤 네트워크 어댑터에서 IP 주소를 가져올지를 좁혀야 합니다. WMI를 사용할 때는 Win32_NetworkAdapterConfiguration 클래스를 사용하세요. 이 클래스는 Get-NetIPAddress
가 반환하는 정보의 대부분을 제공합니다.
먼저 원격 컴퓨터의 이름이 포함된 PowerShell 스크립트를 만들고, 새로운 CIM 세션을 생성한 다음 해당 세션 제거 라인을 아래에 추가하세요.
CIM 세션 코드를 작성한 후 WMI 쿼리를 삽입하세요.

기본 출력에서는 IP 주소가 표시되지 않고, 단일 인스턴스를 반환하지 않습니다. 원하는 IP 주소를 가진 인스턴스를 좁히려면 어떻게 해야 할까요?
먼저 Select-Object
를 사용하여 모든 속성을 표시하세요.
출력을 스크롤하면 일부 IP 주소가 없는 네트워크 어댑터, 하나의 IP 주소가 있는 어댑터 및 여러 IP 주소가 있는 어댑터를 알 수 있습니다! 이를 제한해야 합니다. 모든 서버에 적용할 수 있는 표준 기준을 찾아야 합니다.

각 어댑터에는 IPEnabled
속성이 있어야합니다. 이 속성이 True로 설정되면 TCP/IP 프로토콜이이 NIC에 바인딩되어 IP 주소를 갖는 선행 조건이됩니다. IPEnabled
속성이 True로 설정된 NIC를 좁히고 찾고있는 어댑터를 얻을 수 있습니다.
WMI 인스턴스를 필터링 할 때는 Get-CimInstance
에 Filter
매개 변수를 사용하는 것이 좋습니다. PowerShell 커뮤니티에는 항상 “왼쪽으로 필터링하라”는 속담이 있습니다. 기회가 있다면이 말은 항상 출력을 가능한 한 왼쪽으로 필터링하라는 것을 의미합니다.
필요하지 않은 경우 Where-Object
를 사용하지 마십시오. 파이프라인을 통해 불필요한 개체를 처리하는 오버헤드가 없기 때문에 성능이 훨씬 빠릅니다.
Get-CimInstance
의 Filter
매개 변수는 Windows Query Language (WQL)을 사용합니다. WQL은 SQL의 작은 하위 집합입니다. Filter
매개 변수는 SQL이 기대하는 것과 동일한 제약 조건 WHERE 절 구문을 예상합니다.
IPEnabled 속성이 True로 설정된 Win32_NetworkAdapterConfiguration 클래스의 모든 CIM 인스턴스를 찾으려면 SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'
WQL 쿼리를 사용하십시오.
이미 Get-CimInstance
에서 ClassName
매개 변수 인수의 클래스 이름을 지정했으므로 Filter
에서 IPEnabled = 'True'
를 지정해야합니다. 이렇게하면 IP 주소가 있는 네트워크 어댑터만 반환됩니다.
위의 코드 스니펫을 실행하면 Get-CimInstance
가 단일(또는 제한된 집합) 인스턴스만 반환하는 것을 볼 수 있습니다.
이제 단일 CIM 인스턴스가 있고 찾고 있는 속성인 IPAddress
를 알았으니 어떤지 살펴보겠습니다. 이 경우 IPAddress
속성에 대해 세 개의 문자열을 반환하지만 단일 CIM 인스턴스를 반환합니다. 이중 IPV6 주소도 포함됩니다.
더 많은 요소를 필터링해야 합니다. WQL은 IPAddress
속성 값보다 깊은 수준으로 필터링할 수 없으므로 이제 IPv4 주소를 구문 분석해야 합니다.
IPv4 주소는 일반적으로 배열에서 정의된 첫 번째입니다. 아래와 같이 0 인덱스를 참조하여 해당 주소를 선택하십시오. 이렇게 하면 단일 IPV4 IP 주소 문자열만 반환됩니다.
IPv4 주소가 항상 배열 요소 중 첫 번째인 것은 아닐 수 있습니다. 사실 IPAddress 속성은 배열일 필요가 없습니다. IP 구성은 어댑터 및 다양한 구성에 따라 크게 다릅니다. 필터링하는 데 창의적으로 접근해야 할 수도 있습니다.
결론
컴퓨터에서 IP 주소를 가져오려면 먼저 Get-NetIPAddress
cmdlet을 살펴보십시오. 더 큰 스크립트를 작성하거나 어떤 이유로 이 명령을 실행할 수 없는 경우, Get-CimInstance
및 CIM 세션을 사용하여 작업을 수행하는 것을 고려해보십시오.
Source:
https://adamtheautomator.com/powershell-get-ip-address/