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.ps1fá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 0lesznek 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.

Lásd még