Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2:SkryptyprogramuWindowsPowerShell
DodawanieparametrówdopoleceniaForEach-Object
47
WskrypcieGetWmiAndQuery.ps1,cmdletForEach-Objecttworzylistęwszystkich
klasWMI,którychnazwyzawierająciągliterusb.Tenkonkretnyskryptjestbardzouży-
teczny
,ponieważtworzylistęzawierającązarównonazwyprocesów,jakiodpowiadających
tymprocesomidentyfikatorówPID(ProcessIDIdentyfikatorprocesu).Ponadtoskrypt
GetProcessByID.ps1możnałatwoprzerobić,takbyakceptowałargumentpodawany
wwierszupoleceń.JakopierwszywykonanyzostaniecmdletGet-WmiObjectzprzełącz-
nikiem-list,którytworzylistęwszystkichklasWMIistniejącychwdomyślnejprzestrzeni
nazwpodsystemuWMI.Następnierezultatyzostająprzesłanepotokiemdopolecenia
cmdletWhere-Object,którydokonujeprzefiltrowaniazbioruwynikowego,pozostawiając
wnimtylkoteobiekty
,którychwłaściwośćNamezawieraciągznakówzapisanywzmien-
nej$strClass.
StosowanieparametruBegin
Parametr-beginpoleceniaForEach-Objectużytyzostałdowypisanianazwyużytejdowyge-
nerowanialistyklasWMI.Akcjataniemawpływunabieżącyobiektpotoku.Wrzeczy-
wistościwinterakcjęzbieżącymobiektempotokuniewchodzianiparametr-begin,ani
parametr-end.Parametrytestanowiąjednakdoskonałemiejscedowykonaniaprzetwarza-
niawstępnegolubkońcowego.Doumieszczeniablokuskryptowego,wchodzącegowinte-
rakcjęzbieżącymobiektempotoku,służyparametr-process.Parametrtenjestparametrem
domyślnyminiewymagajawnegoużycia.TreśćskryptuGet-WmiAndQuery.ps1została
pokazanaponiżej.
GetWmiAndQuery.ps1
$strClass="usb"
Get-WmiObject-List|
Where{$_.name-like"*$strClass*"}|
ForEach-Object-begin`
{
Write-Host"$strClasswmilistings"
Start-Sleep3
}`
-Process`
{
Get-wmiObject$_.name
}
WskrypcieProcessUsbHub.ps1cmdletGet-WmiObjectużytyzostałdopobraniainstancji
klasyWin32_USBHub.Dysponującjużkolekcjąobiektówtypuhubusbzostająoneprzesłane
potokiemdopoleceniacmdletForEach-Object.Sugestia:dlapoprawyczytelnościskryptu
należywyrównaćparametry-begin,-processoraz-enddolewejkrawędziskryptu.Wymaga
tojednakoznaczeniakontynuacjiliniizapomocąznakuodwróconegoapostrofu(`).
Wsekcji-beginumieszczonyzostałblokkoduwypisującynazwękomputeraprzyuży-
ciupoleceniacmdletWrite-Host.Dopobranianazwykomputerazezmiennejsystemowej
%computername%użytezostałowyrażeniepodrzędneodczytującewartośćtejzmiennej
zwirtualnegodyskuprogramuPowerShell,env:\.