about_Scripts
Rövid leírás
Leírja, hogyan futtathat és írhat szkripteket a PowerShellben.
Hosszú leírás
A szkriptek egyszerű szöveges fájlok, amelyek egy vagy több PowerShell-parancsot tartalmaznak.
A PowerShell-szkriptek fájlkiterjesztéssel .ps1
rendelkeznek.
A szkriptek futtatása sokban hasonlít egy parancsmag futtatásához. Írja be a szkript elérési útját és fájlnevét, és paraméterekkel küldje el az adatokat, és adja meg a beállításokat. Szkripteket futtathat a számítógépen vagy egy másik számítógépen egy távoli munkamenetben.
A szkript írása egy parancsot ment későbbi használatra, és megkönnyíti a másokkal való megosztást. A legfontosabb, hogy egyszerűen futtathatja a parancsokat a szkript elérési útjának és a fájlnévnek a beírásával. A szkriptek lehetnek olyan egyszerűek, mint egy fájl egyetlen parancsa, vagy olyan kiterjedtek, mint egy összetett program.
A szkriptek további funkciókkal rendelkeznek, például a #Requires
speciális megjegyzésekkel, a paraméterek használatával, az adatszakaszok támogatásával és a digitális aláírással a biztonság érdekében.
Súgótémaköröket is írhat szkriptekhez és a szkript bármely függvényéhez.
Szkript futtatása
Mielőtt parancsfájlt futtatna Windows rendszeren, módosítania kell az alapértelmezett PowerShell végrehajtási szabályzatot. A végrehajtási szabályzat nem vonatkozik a nem Windows-platformokon futó PowerShellre.
Az alapértelmezett végrehajtási szabályzat megakadályozza az Restricted
összes szkript futtatását, beleértve a helyi számítógépen írt szkripteket is. További információ: about_Execution_Policies.
A végrehajtási szabályzatot a rendszer a beállításjegyzékbe menti, ezért minden számítógépen csak egyszer kell módosítania.
A végrehajtási szabályzat módosításához kövesse az alábbi eljárást.
A parancssorba írja be a következőt:
Set-ExecutionPolicy AllSigned
vagy
Set-ExecutionPolicy RemoteSigned
A módosítás azonnal hatályba lép.
Szkript futtatásához írja be a szkriptfájl teljes nevét és elérési útját.
Ha például a Get-ServiceLog.ps1 szkriptet szeretné futtatni a C:\Scripts könyvtárban, akkor ezt írja be:
C:\Scripts\Get-ServiceLog.ps1
Ha szkriptet szeretne futtatni az aktuális könyvtárban, írja be az aktuális könyvtár elérési útját, vagy használjon egy ponttal az aktuális könyvtárat, majd egy fordított perjelet (.\
).
Ha például a ServicesLog.ps1 szkriptet a helyi könyvtárban szeretné futtatni, írja be a következőt:
.\Get-ServiceLog.ps1
Ha a szkript paraméterekkel rendelkezik, írja be a paramétereket és a paraméterértékeket a szkriptfájl neve után.
Az alábbi parancs például a Get-ServiceLog szkript ServiceName paraméterével kéri le a WinRM szolgáltatástevékenység naplóját.
.\Get-ServiceLog.ps1 -ServiceName WinRM
Biztonsági funkcióként a PowerShell nem futtat szkripteket, amikor duplán kattint a szkript ikonra a Fájlkezelő, vagy ha teljes elérési út nélkül írja be a szkript nevét, még akkor sem, ha a szkript az aktuális könyvtárban található. A parancsok és szkriptek PowerShellben való futtatásáról további információt a about_Command_Precedence című témakörben talál.
Futtatás a PowerShell-lel
A PowerShell 3.0-tól kezdve szkripteket futtathat Fájlkezelő.
A "Futtatás PowerShell-lel" funkció használata:
Futtassa Fájlkezelő, kattintson a jobb gombbal a szkriptfájl nevére, majd válassza a "Futtatás a PowerShell-lel" lehetőséget.
A "Futtatás PowerShell-lel" funkció olyan szkriptek futtatására szolgál, amelyek nem rendelkeznek szükséges paraméterekkel, és nem ad vissza kimenetet a parancssornak.
További információ: about_Run_With_PowerShell.
Szkriptek futtatása más számítógépeken
Ha szkriptet szeretne futtatni egy vagy több távoli számítógépen, használja a Invoke-Command
parancsmag FilePath paraméterét.
Adja meg a szkript elérési útját és fájlnevét a FilePath paraméter értékeként. A szkriptnek a helyi számítógépen vagy egy olyan könyvtárban kell lennie, amelyhez a helyi számítógép hozzáférhet.
A következő parancs futtatja a Get-ServiceLog.ps1
szkriptet a Server01 és a Server02 nevű távoli számítógépeken.
Invoke-Command -ComputerName Server01,Server02 -FilePath `
C:\Scripts\Get-ServiceLog.ps1
Segítség kérése szkriptekhez
A Get-Help parancsmag lekéri a szkriptek, valamint a parancsmagok és más parancstípusok súgótémaköröket. A szkript súgótémakörének lekéréséhez írja be Get-Help
a szkript elérési útját és fájlnevét. Ha a szkript elérési útja a Path
környezeti változóban található, kihagyhatja az elérési utat.
Ha például segítségre van szüksége a ServicesLog.ps1 szkripthez, írja be a következőt:
get-help C:\admin\scripts\ServicesLog.ps1
Szkript írása
A szkriptek bármilyen érvényes PowerShell-parancsot tartalmazhatnak, beleértve az önálló parancsokat, a folyamatot használó parancsokat, a függvényeket és a vezérlőstruktúrákat, például a Ha utasításokat és a For ciklusokat.
Szkript írásához nyisson meg egy új fájlt egy szövegszerkesztőben, írja be a parancsokat, és mentse őket egy érvényes fájlnévvel rendelkező fájlba a .ps1
fájlkiterjesztéssel.
Az alábbi példa egy egyszerű szkript, amely lekéri az aktuális rendszeren futó szolgáltatásokat, és menti őket egy naplófájlba. A naplófájl neve az aktuális dátumból jön létre.
$date = (get-date).dayofyear
get-service | out-file "$date.log"
A szkript létrehozásához nyisson meg egy szövegszerkesztőt vagy egy szkriptszerkesztőt, írja be ezeket a parancsokat, majd mentse őket egy nevű ServiceLog.ps1
fájlba.
Paraméterek szkriptekben
Paraméterek szkriptben való definiálásához használjon param utasítást. Az Param
utasításnak a szkript első utasításának kell lennie, kivéve a megjegyzéseket és az utasításokat #Require
.
A szkriptparaméterek a függvényparaméterekhez hasonlóan működnek. A paraméterértékek a szkript összes parancsa számára elérhetők. A függvényparaméterek összes funkciója, beleértve a Paraméter attribútumot és annak elnevezett argumentumait is, a szkriptekben is érvényes.
A szkript futtatásakor a szkript felhasználói a szkript neve után gépelik be a paramétereket.
Az alábbi példa egy Test-Remote.ps1
ComputerName paraméterrel rendelkező szkriptet mutat be. Mindkét szkriptfüggvény hozzáférhet a ComputerName paraméter értékéhez.
param ($ComputerName = $(throw "ComputerName parameter is required."))
function CanPing {
$error.clear()
$tmp = test-connection $computername -erroraction SilentlyContinue
if (!$?)
{write-host "Ping failed: $ComputerName."; return $false}
else
{write-host "Ping succeeded: $ComputerName"; return $true}
}
function CanRemote {
$s = new-pssession $computername -erroraction SilentlyContinue
if ($s -is [System.Management.Automation.Runspaces.PSSession])
{write-host "Remote test succeeded: $ComputerName."}
else
{write-host "Remote test failed: $ComputerName."}
}
if (CanPing $computername) {CanRemote $computername}
A szkript futtatásához írja be a paraméter nevét a szkript neve után. Példa:
C:\PS> .\test-remote.ps1 -computername Server01
Ping succeeded: Server01
Remote test failed: Server01
A Param utasításról és a függvényparaméterekről további információt a about_Functions és about_Functions_Advanced_Parameters talál.
Súgó írása szkriptekhez
A szkriptek súgótémakörét az alábbi két módszer egyikével írhatja:
Megjegyzésalapú súgó szkriptekhez
Hozzon létre egy súgótémakört speciális kulcsszavak használatával a megjegyzésekben. Ha megjegyzésalapú súgót szeretne létrehozni egy szkripthez, a megjegyzéseket a szkriptfájl elején vagy végén kell elhelyezni. További információ a megjegyzésalapú súgóról: about_Comment_Based_Help.
XML-alapú súgó szkriptekhez
Hozzon létre egy XML-alapú súgótémakört, például a parancsmagokhoz általában létrehozott típust. Xml-alapú súgóra van szükség, ha több nyelvre fordítja a súgótémaköröket.
Ha a szkriptet az XML-alapú súgótémakörhöz szeretné társítani, használja a következőt: . ExternalHelp Súgó megjegyzés kulcsszó. Az ExternalHelp kulcsszóval kapcsolatos további információkért lásd : about_Comment_Based_Help. Az XML-alapú súgóról további információt a Parancsmag írása súgójában talál.
Kilépési érték visszaadása
Alapértelmezés szerint a szkriptek nem adnak vissza kilépési állapotot, amikor a szkript véget ér. Az utasítással exit
vissza kell adnia egy kilépési kódot egy szkriptből. Alapértelmezés szerint az utasítás ad exit
vissza 0
. Megadhat egy numerikus értéket, amely egy másik kilépési állapotot ad vissza. A nem repülő kilépési kód általában hibát jelez.
Windows rendszeren bármilyen szám [int]::MinValue
engedélyezett és [int]::MaxValue
engedélyezett.
Unix esetében csak a (0) és [byte]::MaxValue
(255) közötti [byte]::MinValue
pozitív számok engedélyezettek. A tartomány negatív száma -1
-255
automatikusan pozitív számmá lesz lefordítva 256 hozzáadásával. Például -2
át lesz alakítva a következővé 254
: .
A PowerShellben az exit
utasítás beállítja a $LASTEXITCODE
változó értékét. A Windows command Shellben (cmd.exe) a kilépési utasítás beállítja a %ERRORLEVEL%
környezeti változó értékét.
A nem numerikus vagy a platformspecifikus tartományon kívüli argumentumok a következő értékre 0
lesznek lefordítva: .
Szkript hatóköre és pontbeírása
Minden szkript a saját hatókörében fut. A szkriptben létrehozott függvények, változók, aliasok és meghajtók csak a szkript hatókörében léteznek. Ezeket az elemeket vagy azok értékeit nem érheti el abban a hatókörben, amelyben a szkript fut.
Ha egy szkriptet egy másik hatókörben szeretne futtatni, megadhat egy hatókört( például globális vagy helyi), vagy pontozza a szkriptet.
A pontkészítési funkció lehetővé teszi, hogy a szkript hatóköre helyett az aktuális hatókörben futtassa a szkriptet. Pontforrású szkript futtatásakor a szkript parancsai úgy futnak, mintha beírta volna őket a parancssorba. A szkript által létrehozott függvények, változók, aliasok és meghajtók abban a hatókörben jönnek létre, amelyben dolgozik. A szkript futtatása után használhatja a létrehozott elemeket, és elérheti azok értékeit a munkamenetben.
Ha pontként szeretne forrásként használni egy szkriptet, írjon be egy pont (.) és egy szóközt a szkript elérési útja előtt.
Példa:
. C:\scripts\UtilityFunctions.ps1
vagy
. .\UtilityFunctions.ps1
A szkript futtatása után a UtilityFunctions.ps1
szkript által létrehozott függvények és változók hozzá lesznek adva az aktuális hatókörhöz.
A szkript például UtilityFunctions.ps1
létrehozza a függvényt New-Profile
és a változót $ProfileName
.
#In UtilityFunctions.ps1
function New-Profile
{
Write-Host "Running New-Profile function"
$profileName = split-path $profile -leaf
if (test-path $profile)
{write-error "Profile $profileName already exists on this computer."}
else
{new-item -type file -path $profile -force }
}
Ha a szkriptet a UtilityFunctions.ps1
saját szkript hatókörében futtatja, a New-Profile
függvény és a $ProfileName
változó csak akkor létezik, amikor a szkript fut. Amikor a szkript kilép, a függvény és a változó el lesz távolítva az alábbi példában látható módon.
C:\PS> .\UtilityFunctions.ps1
C:\PS> New-Profile
The term 'new-profile' is not recognized as a cmdlet, function, operable
program, or script file. Verify the term and try again.
At line:1 char:12
+ new-profile <<<<
+ CategoryInfo : ObjectNotFound: (new-profile:String) [],
+ FullyQualifiedErrorId : CommandNotFoundException
C:\PS> $profileName
C:\PS>
Amikor pontozza a szkriptet, és futtatja, a szkript létrehozza a New-Profile
függvényt és a változót a $ProfileName
munkamenetben a hatókörben. A szkript futtatása után használhatja a függvényt a New-Profile
munkamenetben az alábbi példában látható módon.
C:\PS> . .\UtilityFunctions.ps1
C:\PS> New-Profile
Directory: C:\Users\juneb\Documents\WindowsPowerShell
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 1/14/2009 3:08 PM 0 Microsoft.PowerShellISE_profile.ps1
C:\PS> $profileName
Microsoft.PowerShellISE_profile.ps1
További információ a hatókörről: about_Scopes.
Szkriptek modulokban
A modul a kapcsolódó PowerShell-erőforrások készlete, amelyek egységként terjeszthetők. A modulok segítségével rendszerezheti a szkripteket, függvényeket és egyéb erőforrásokat. Modulok használatával is terjesztheti a kódot másoknak, és megbízható forrásokból is lekérheti a kódot.
Felvehet szkripteket a modulokba, vagy létrehozhat egy szkriptmodult, amely egy olyan modul, amely teljes egészében vagy elsősorban egy szkriptből és támogató erőforrásokból áll. A szkriptmodulok csak egy .psm1 kiterjesztésű szkriptek.
A modulokkal kapcsolatos további információkért lásd: about_Modules.
Egyéb szkriptfunkciók
A PowerShell számos hasznos funkcióval rendelkezik, amelyeket szkriptekben is használhat.
#Requires
– Utasítással#Requires
megakadályozhatja, hogy a szkriptek meghatározott modulok vagy beépülő modulok és a PowerShell megadott verziója nélkül fussanak. További információ: about_Requires.$PSCommandPath
– A futtatott szkript teljes elérési útját és nevét tartalmazza. Ez a paraméter minden szkriptben érvényes. Ezt az automatikus változót a PowerShell 3.0-ban vezetik be.$PSScriptRoot
– Azt a könyvtárat tartalmazza, amelyből szkriptet futtat. A PowerShell 2.0-ban ez a változó csak szkriptmodulokban (.psm1
) érvényes. A PowerShell 3.0-tól kezdve minden szkriptben érvényes.$MyInvocation
– Az$MyInvocation
automatikus változó információkat tartalmaz az aktuális szkriptről, beleértve az indítási vagy meghívási információkat is. Ezzel a változóval és tulajdonságaival információkat kérhet le a szkriptről a futtatás közben. Például a$MyInvocation
. A MyCommand.Path változó a szkript elérési útját és fájlnevét tartalmazza.$MyInvocation
. A sor tartalmazza a parancsot, amely elindította a szkriptet, beleértve az összes paramétert és értéket.A PowerShell 3.0-tól kezdve két új tulajdonsággal rendelkezik,
$MyInvocation
amelyek információt nyújtanak az aktuális szkriptet meghívó vagy meghívó szkriptről. Ezeknek a tulajdonságoknak az értékei csak akkor lesznek feltöltve, ha a hívó vagy a hívó szkript.A PSCommandPath az aktuális szkriptet meghívó vagy meghívó szkript teljes elérési útját és nevét tartalmazza.
A PSScriptRoot annak a szkriptnek a könyvtárát tartalmazza, amely meghívta vagy meghívta az aktuális szkriptet.
$PSCommandPath
$PSScriptRoot
Az aktuális szkripttel kapcsolatos információkat tartalmazó automatikus változókkal ellentétben a változó PSCommandPath és PSScriptRoot tulajdonságai$MyInvocation
az aktuális szkriptnek nevezett szkripttel kapcsolatos információkat tartalmaznak.Adatszakaszok – A kulcsszóval elválaszthatja az
Data
adatokat a szkriptekben lévő logikától. Az adatszakaszok megkönnyítik a honosítást is. További információ: about_Data_Sections és about_Script_Internationalization.Szkript-aláírás – Digitális aláírást adhat hozzá egy szkripthez. A végrehajtási szabályzattól függően digitális aláírásokkal korlátozhatja a nem biztonságos parancsokat tartalmazó szkriptek futtatását. További információ: about_Execution_Policies és about_Signing.