Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
46
WindowsPowerShellprzewodnikposkryptach
zezbioruzwracanychelementówdyskisieciowe,dyskiwymienneorazdyskitworzone
wpamięciRAM(tzw.ramdyski).
Stała$intDriveTypejestużywanatylkowliniizfiltremWhere.Natomiastzmienna
$strComputer,przyjmujekolejnowszystkiewartościokreślonewtablicy$aryComputers.
WprzypadkuskryptuGetHardDiskDetails.ps1wartośćzmiennej$strComputerzmieni
siędwukrotnie.Podczaspierwszegoprzebiegupętlibędzieonamiaławartośćloopback,
apodczasdrugiegoprzebieguwartośćlocalhost.Nawetpododaniunazw250różnych
komputerówefektpozostanietakisamwartośćzmiennej$strComputerbędziesięzmie-
niaćwrazzkażdąiteracjąpętli.
GetHardDiskDetails.ps1
$aryComputers="loopback","localhost"
Set-Variable-nameintDriveType-value3-optionconstant
foreach($strComputerin$aryComputers)
{"Dyskitwardena:"+$strComputer
Get-WmiObject-classwin32_logicaldisk-computername$strComputer|
Where{$_.drivetype-eq$intDriveType}}
Używanieinstrukcjisterujących
PowłączeniuobsługiskryptówwprogramieWindowsPowerShelluzyskujemydostęp
dopewnychzaawansowanychpoleceńcmdlet,służącychdosterowaniaprzepływem.Nie
oznaczatowcale,żezpoziomukonsoliniemożnasterowaćprzepływem.Instrukcjeste-
rująceprzepływemjaknajbardziejdostępnepodczaskorzystaniazkonsoli.Poniżej
pokazanyzostałprzykład:
PSC:\>Get-Process|foreach($_.name){if($_.name-eq"system"){
Write-Host"Identyfikatorprocesusystemjestrówny:"$_.ID}}
Problememwtymprzypadkujestilośćkoniecznychdowpisywaniaznaków.Lepszym
rozwiązaniemmożebyćzapisanietegotypupoleceniajakoskryptu.Zapisaniewpliku
długiegopoleceniamatakżedodatkowązaletępolegającąnapoprawieczytelności.Możliwe
jestnp.wyrównanienawiasówklamrowychorazinnychskładnikówpolecenia.Pozwala
totakżenauniknięciesztywnegoumieszczaniawskryptachnp.nazwprocesów,które
możnazamiasttegozapisaćjakozmienne.Ułatwiatomodyfikowanieskryptów,anawet
tworzenieskryptów,akceptującychargumentyprzekazywanezpoziomuwierszapoleceń.
PokazanyponiżejskryptGetProcessByID.ps1demonstrujetemożliwościwpraktyce.
GetProcessByID.ps1
$strProcess="system"
Get-Process|
foreach($_.name){
if($_.name-eq$strProcess)
{
Write-Host"Identyfikatorprocesusystemjestrówny:"$_.ID
}
}