zakładam, że wszyscy wiedzą czym jest WMI i CIM – to jest abecadło dla każdego inżyniera systemowego. a [IMHO] podstawowa różnica w implementacji to możliwość tworzenia sesji CIM. czego dla WMI zrobić się nie dało. daje to niesamowite możliwości w przypadq hurtowych zapytań. podam trywialny przykład, gdzie zysk z zastosowania sesji nie jest wielki, ale osoby z wyobraźnią powinny poczuć moc, drzemiącą w takim zastosowaniu.
założeniem przykładu jest sztywna notacja nazewnicza dla hostów: ta sama nazwa 'HOST’, zakończona inkrementowaną liczbą. ale równie dobrze można użyć ’cat lista.txt | %’ . niemniej chciałem przy okazji przemycić jeszcze jedną sztuczkę – w jaki sposób dopełniać liczby z dopełnieniem zerami.
cel: odpytanie 2o hostów o podstawowe informacje o BIOS – np. numer seryjny – oraz volumeny.
dla WMI
1..20|%{gwmi -ComputerName HOST$($_.toString("00")) -Class win32_bios} 1..20|%{gwmi -ComputerName HOST$($_.toString("00")) -Class win32_volume}
teraz zmierzmy czas dla wykonania tej sekwencji [ja robiłem dla siedmiu hostów]:
(27.05)[12:47]C:\scriptz :))o- measure-command{ 1..7|%{gwmi -computerName HOST0$_ -Class win32_bios;gwmi -computername HOST0$_ -class win32_volume} } Days : 0 Hours : 0 Minutes : 0 Seconds : 1 Milliseconds : 331 Ticks : 13317747 TotalDays : 1.54140590277778E-05 TotalHours : 0.000369937416666667 TotalMinutes : 0.022196245 TotalSeconds : 1.3317747 TotalMilliseconds : 1331.7747
dla CIM
1..20|%{new-CimSession -ComputerName HOST$($_.toString("00"))} gcim -CimSession (Get-CimSession) -ClassName win32_bios gcim -CimSession (Get-CimSession) -ClassName win32_volume
wydaje się być bardziej skomplikowane. odrobinę jest – trzeba najpierw założyć sesje, a następnie wykonać zapytanie wskazując na nie. sprawdźmy ekonomiczność zapytania [również dla 7 hostów]:
(27.05)[12:57]C:\scriptz :))o- measure-command{ gcim -CimSession (Get-CimSession) -Class win32_bios;gcim -CimSession (Get-CimSession) -class win32_volume } Days : 0 Hours : 0 Minutes : 0 Seconds : 0 Milliseconds : 263 Ticks : 2637087 TotalDays : 3.05218402777778E-06 TotalHours : 7.32524166666667E-05 TotalMinutes : 0.004395145 TotalSeconds : 0.2637087 TotalMilliseconds : 263.7087
1331 vs 263 ms czyli 5cio krotnie szybciej [SIC!]. oczywiście można się przyczepić, że nie wliczyłem czasu utworzenia samej sesji ale…
wnioski
przy pojedynczym zapytaniu lub do niewielkiej ilości hostów – nie ma znaczenia czego użyjemy, bo czy co się wykona w 4oms czy w 1ooms jest dla człowieka pomijalne. jednak możliwość tworzenia sesji zwraca się przy seryjnych odpytaniach oraz jeśli do odpytania jest wiele hostów.
warto zauważyć, że przy dłuższej pracy zapis się upraszcza – ponieważ zamiast na iteracjach czy listingach, pracujemy na liście sesji.
eN.