Az igazán nagy előrelépést a WMI cmdletekhez képest a távoli futtatásnál találjuk. A WMI cmdletek a nem szabványos DCOM protokollt használják távoli elérés esetén. Ez egy nem túl friss protokoll, amit a Windows rendszereken kívül nem nagyon támogat senki. Az igazán nagy baj ezzel, hogy nagyon lassú, nehézkes a kapcsolat felépítése, és minden parancsnál ráadásul felépül, vegrehajtódik a parancs, majd bontásra kerül. Hiába adunk ki több parancsot ugyanarra a gépre vonatkozólag az egész koreográfia az elejétől megismétlődik.
A CIM cmdleteknél van lehetőség külön CIM kapcsolatok kezelésére, ha erre szükség van, például amikor nem csak egy CIM parancsot akarunk futtatni egy géppel kapcsolatban. De akár a hagyományos módon is kezelhetjük a távoli kapcsolatokat. Elsőként nézzük a hagyományos kapcsolatot, ilyenkor a -ComputerName paramétert használjuk:
PS C:\> Get-CimInstance -ComputerName DC2016 -ClassName Win32_computersystem
Name PrimaryOwn Domain TotalPhys Model Manufactu PSCompute
erName icalMemor rer rName
y
---- ---------- ------ --------- ----- --------- ---------
DC2016 Windows... mydomai... 429449... Virtua... innote... DC2016
Ha pedig szeretnénk hosszantartó kapcsolatot kiépíteni, használhatjuk a New-CimSession cmdletet:
PS C:\> $cimsess = New-CimSession -ComputerName dc2016
Majd a session objektum birtokában ezzel hívhatjuk meg a CIM cmdletet:
PS C:\> Get-CimInstance -CimSession $cimsess -ClassName Win32_computersystem
Name PrimaryOwn Domain TotalPhys Model Manufactu PSCompute
erName icalMemor rer rName
y
---- ---------- ------ --------- ----- --------- ---------
DC2016 Windows... mydomai... 429449... Virtua... innote... dc2016
Ha nincs szükségünk a kapcsolatra, akkor a Remove-CimSession cmdlettel bonthatjuk azt:
PS C:\> Remove-CimSession -CimSession $cimsess
Mindez nagyon hasonlatos a PowerShell távoli futtatásánál látottakhoz. Itt is igaz az, hogy a kapcsolatot akár egyszerre több gép irányába kiépíthetjük:
PS C:\> $cimsess = New-CimSession -ComputerName dc2016, Server1
PS C:\> $cimsess
Id : 2
Name : CimSession2
InstanceId : 3f131da7-5840-4b68-90a7-669d3cc06f21
ComputerName : dc2016
Protocol : WSMAN
Id : 3
Name : CimSession3
InstanceId : 09d472b3-b0b6-44f0-8341-e6af13478ecd
ComputerName : Server1
Protocol : WSMAN
Sőt! Ami még nagyon hiányzott, hogy szabályozhatjuk a időtúllépés értékét az -OperationTimeoutSec paraméterrel:
PS C:\> Get-CimInstance -CimSession $cimsess -ClassName Win32_ComputerSystem -O
perationTimeoutSec 1
Name PrimaryOwn Domain TotalPhys Model Manufactu PSCompute
erName icalMemor rer rName
y
---- ---------- ------ --------- ----- --------- ---------
DC2016 Windows... mydomai... 429449... Virtua... innote... dc2016
SERVER1 Windows... mydomai... 429449... Virtua... innote... Server1