Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 .ps1 fájlkiterjesztéssel 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.
Egy szkript írása lehetővé teszi egy parancs későbbi használatra történő mentését, és megkönnyíti annak másokkal való megosztását. 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ókat is tartalmaznak, például a #Requires speciális megjegyzést, a paraméterek használatát, az adatszakaszok támogatását és a digitális aláírást 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 (Restricted) megakadályozza az ö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 a C:\Scripts könyvtárban szeretné futtatni, írja be a következőt:
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 pontot az aktuális könyvtár jelölésére, majd egy backslash-t (.\).
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, ha duplán kattint a parancsfájl ikonra a Fájlkezelőben, 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_Precedencecímű témakörben talál.
Futtatás a PowerShell-lel
A PowerShell 3.0-tól kezdve szkripteket futtathat a Fájlkezelőből.
A "PowerShell-lel való futtatás" funkció használatához:
Futtassa a Fájlkezelőt, 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 egy vagy több távoli számítógépen szeretne parancsfájlt futtatni, használja a parancsmag Invoke-Command 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.
$invokeCommandSplat = @{
ComputerName = 'Server01', 'Server02'
FilePath = 'C:\Scripts\Get-ServiceLog.ps1'
}
Invoke-Command @invokeCommandSplat
Segítség kérése szkriptekhez
A Get-Help parancsmag a szkriptekhez, a parancsmagokhoz és más parancstípusokhoz tartozó súgótémaköröket kapja. A szkript súgótémakörének lekéréséhez írja be a Get-Help, majd 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 if utasításokat és 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 ServiceLog.ps1nevű fájlba.
Paraméterek szkriptekben
Paraméterek szkriptben való definiálásához használjon egy param utasítást. A param utasításnak a szkript első utasításának kell lennie, kivéve a megjegyzéseket és az #Requires utasításokat.
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 szkriptet mutat be, amely ComputerName paraméterrel rendelkezik. Mindkét szkriptfüggvény hozzáférhet a ComputerName paraméterértékhez.
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éldául:
C:\PS> .\test-remote.ps1 -ComputerName Server01
Ping succeeded: Server01
Remote test failed: Server01
A param utasítással és a függvényparaméterekkel kapcsolatos további információkért lásd: about_Functions és about_Functions_Advanced_Parameters.
Súgó írása szkriptekhez
A szkriptek súgótémakörét az alábbi két módszer egyikével írhatja:
Comment-Based 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óért a megjegyzésalapú súgóról lásd: about_Comment_Based_Help.
XML-Based 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 .EXTERNALHELP súgókommentár kulcsszót. További információk:
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. A exit utasítással vissza kell adnia egy kilépési kódot egy szkriptből. Alapértelmezés szerint a exit utasítás 0ad vissza. Megadhat egy numerikus értéket, amely egy másik kilépési állapotot ad vissza. A nem nulla kilépési kód általában hibát jelez.
Windows rendszeren a [int]::MinValue és a [int]::MaxValue közötti szám engedélyezett.
Unix esetében csak a pozitív számok engedélyezettek [byte]::MinValue (0) és [byte]::MaxValue (255) között. A -1 közötti -255 tartomány negatív száma automatikusan pozitív számmá alakul 256 hozzáadásával. A -2 például 254lesz.
A PowerShellben a exit utasítás a $LASTEXITCODE változó értékét állítja be. A Windows command Shellben (cmd.exe) a kilépési utasítás a %ERRORLEVEL% környezeti változó értékét állítja be.
A nem numerikus vagy a platformspecifikus tartományon kívüli argumentumok 0értékre 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 dot sourcing funkció lehetővé teszi, hogy a szkript az aktuális hatókörben fusson ahelyett, hogy a szkript hatókörében futna. 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.
Egy szkript pontforrásításához, írjon be egy pontot (.) és szóközt a szkript elérési útja elé.
Például:
. C:\scripts\UtilityFunctions.ps1
vagy
. .\UtilityFunctions.ps1
A UtilityFunctions.ps1 szkript futtatása után a szkript által létrehozott függvények és változók hozzá lesznek adva az aktuális hatókörhöz.
A UtilityFunctions.ps1 szkript például létrehozza a New-Profile függvényt és a $ProfileName változót.
#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 UtilityFunctions.ps1 szkriptet a 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 pontforrással futtatja a szkriptet, a szkript létrehozza a New-Profile függvényt és a $ProfileName változót a jelenlegi munkamenetében, az adott hatókörben. A szkript futtatása után használhatja a New-Profile függvényt a 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 .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– Egy#Requiresutasítással megakadályozhatja, hogy egy szkript meghatározott modulok vagy beépülő modulok és a PowerShell megadott verziója nélkül fusson. 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$MyInvocationautomatikus 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 kezdődően a
$MyInvocationkét új tulajdonsággal rendelkezik, amelyek információt nyújtanak az aktuális szkriptet meghívó vagy elindító szkriptről. Ezeknek a tulajdonságoknak az értékei csak akkor lesznek kitöltve, ha a meghívó szkript.PSCommandPath tartalmazza az aktuális szkriptet meghívó szkript teljes elérési útját és nevét.
PSScriptRoot annak a szkriptnek a könyvtárát tartalmazza, amely az aktuális szkriptet hívta vagy meghívta.
Az aktuális szkripttel kapcsolatos információkat tartalmazó
$PSCommandPathés$PSScriptRootautomatikus változókkal ellentétben a PSCommandPath és PSScriptRoot tulajdonságai az$MyInvocationaktuális szkriptnek nevezett szkriptről tartalmaznak információkat.Adatszakaszok – A
Datakulcsszóval elválaszthatja az adatokat a szkriptekben lévő logikától. Az adatszakaszok megkönnyítik a honosítást is. További információért lásd: 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ókért lásd: about_Execution_Policies és about_Signing.