about_CimSession — CIM 세션이란?
about_CimSession — CIM 세션이란?
오늘은 PowerShell의 CIM 세션에 대해 이야기해 볼게요. CIM 세션이 뭔지, PowerShell 세션과는 어떻게 다른지, 언제 써야 하는지를 차근차근 짚어볼게요.
출처: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_cimsession
본문
간단히 말하면 CimSession 객체가 무엇인지 설명하고, CIM 세션과 PowerShell 세션의 차이를 다뤄요.
자세한 설명
이 내용은 Windows에서 돌아가는 PowerShell에만 적용돼요.
CIM(Common Information Model) 세션은 로컬 컴퓨터나 원격 컴퓨터로의 연결을 나타내는 클라이언트 쪽 객체예요. 이 CIM 세션을 PowerShell 세션(PSSession) 대신 쓸 수 있고, 두 방식은 저마다 장점을 갖고 있어요.
Windows 컴퓨터에서 New-CimSession cmdlet으로 CIM 세션을 만들면, 컴퓨터 이름, 연결에 쓰인 프로토콜, 세션 ID, 인스턴스 ID 같은 연결 정보가 그 객체에 담겨요.
연결에 필요한 정보를 지정한 CimSession 객체를 만들었다고 해서 PowerShell이 바로 연결을 맺는 건 아니에요. 어떤 cmdlet이 그 CIM 세션을 사용할 때 비로소 지정한 컴퓨터에 연결하고, cmdlet이 끝나면 PowerShell이 연결을 끊어요.
반대로 CimSession 대신 PSSession을 만들면 PowerShell이 연결 설정을 검증하고, 연결을 맺은 뒤 계속 유지해요. CIM 세션을 쓰면 필요할 때까지 네트워크 연결을 열지 않아도 되죠. PowerShell 세션에 대해 더 알고 싶으면 about_PSSessions 문서를 확인해 볼게요.
CIM 세션은 언제 써야 할까요?
WMI(Windows Management Instrumentation) 공급자나 CIM over WS-Man을 다루는 cmdlet만 CIM 세션을 받아들여요. 그 외의 cmdlet에는 PSSession을 쓰는 게 맞아요.
CIM 세션을 쓰면 PowerShell이 cmdlet을 로컬 클라이언트에서 실행하고, CIM 세션을 통해 WMI 공급자에 연결해요. 이때 대상 컴퓨터에는 PowerShell이 설치돼 있을 필요도 없고, 아예 Windows 운영체제가 아니어도 괜찮아요.
반대로 PSSession으로 실행한 cmdlet은 대상 컴퓨터에서 돌아가요. 대상 시스템에 PowerShell이 필요하고, 처리 결과를 다시 로컬 컴퓨터로 보내야 하죠. 이 과정에서 PowerShell이 연결을 통해 오가는 데이터를 관리하며, Windows Remote Management(WinRM)가 정한 한도 안에서 크기를 유지해요. CIM 세션은 이런 WinRM 한도를 적용하지 않아요.
CDXML cmdlet 사용하기
CIM 기반의 CDXML(Cmdlet Definition XML) cmdlet은 어떤 WMI 공급자든 사용하도록 작성할 수 있어요. 모든 WMI 공급자는 CimSession 객체를 사용해요. CDXML에 대해 더 자세히 보고 싶으면 CDXML 정의와 용어 페이지를 확인해 보세요.
CDXML cmdlet에는 CimSession 객체 배열을 받을 수 있는 자동 CimSession 매개 변수가 붙어 있어요. 기본적으로 PowerShell은 동시에 맺을 수 있는 CIM 연결 수를 15개로 제한해요. ThrottleLimit을 구현한 CDXML cmdlet은 이 제한을 덮어쓸 수 있어요. ThrottleLimit에 대한 자세한 내용은 각 cmdlet 문서를 참고하면 돼요.