a szkriptekről

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 #Requires utasí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 $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 kezdődően a $MyInvocation ké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 $PSScriptRoot automatikus változókkal ellentétben a PSCommandPath és PSScriptRoot tulajdonságai az $MyInvocation aktuális szkriptnek nevezett szkriptről tartalmaznak információkat.

  • Adatszakaszok – A Data kulcsszó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.

Lásd még