A szkriptek ismertetése

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ájlnévkiterjeszté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 lehetővé teszi a parancsok futtatását egyszerűen 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, mint például a #Requires speciális megjegyzés, a paraméterek használata, az adatszakaszok támogatása és a digitális aláírás 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

A szkript futtatása előtt módosítania kell az alapértelmezett PowerShell-végrehajtási szabályzatot. Az alapértelmezett végrehajtási házirend ("Korlátozott" megakadályozza az összes parancsfájl futtatását, beleértve a helyi számítógépen írt parancsfájlokat 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 pontot az aktuális könyvtár jelölésére, 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 parancsfá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ó. További információ a parancsok és szkriptek PowerShellben való futtatásáról: about_Command_Precedence.

FUTTATÁS A POWERSHELLLEL

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 File Explorer programot, 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

PARANCSFÁJLOK 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 parancsfájlt a Server01 és a Server02 távoli számítógépeken.

Invoke-Command -ComputerName Server01,Server02 -FilePath `
  C:\Scripts\Get-ServiceLog.ps1

SEGÍTSÉG KÉRÉSE A 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" parancsot, majd a szkript elérési útját és fájlnevét. Ha a szkript elérési útja az Elérési út 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

HOGYAN ÍRJUNK SZKRIPTET

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 indítson el egy szövegszerkesztőt (például a Jegyzettömböt) vagy egy szkriptszerkesztőt (például a PowerShell integrált szkriptkörnyezetet [ISE]). Írja be a parancsokat, és mentse őket egy érvényes fájlnévvel és .ps1 fájlnévkiterjesztéssel rendelkező fájlba.

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átumtól jön létre.

$date = (get-date).dayofyear
get-service | out-file "$date.log"

A parancsfájl létrehozásához nyisson meg egy szövegszerkesztőt vagy egy parancsfájl-szerkesztő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 param utasítást. A Param utasításnak a szkript első utasításának kell lennie, kivéve a megjegyzéseket és a #Requires állí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 rendelkezik ComputerName paraméterrel. Mindkét parancsfájl-fü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éldául:

C:\PS> .\test-remote.ps1 -computername Server01

Ping succeeded: Server01
Remote test failed: Server01

További információ a Param utasításról és a függvényparaméterekről: about_Functions és about_Functions_Advanced_Parameters.

ÍRÁSI SEGÍTSÉG 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 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 az MSDN-könyvtár Parancsmag írása súgójában talál.

SZKRIPT HATÓKÖRE ÉS PONTFORRÁS

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 szkript futtatása után a szkript által létrehozott függvények és változók hozzáadódnak 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 szkripthatókörében futtatja, a New-Profile függvény és a $ProfileName változó csak a parancsfájl futása közben létezik. 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ásként használja a szkriptet, és futtatja, a szkript létrehozza a New-Profile függvényt és a $ProfileName változót a munkamenetben a hatókörben. A szkript futtatása után használhatja a New-Profile függvényt a munkamenetben, ahogy az az alábbi példában is látható.

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 szkriptmodul csak egy .psm1 fájlnévkiterjesztésű szkript.

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 – A #Requires utasítással megakadályozhatja, hogy egy szkript megadott 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 a szkript fut. 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 – A $MyInvocation automatikus változó információkat tartalmaz az aktuális szkriptről, beleértve az indítás vagy a "meghívás" módját. Ezzel a változóval és tulajdonságaival futás közben információkat kaphat a szkriptről. A $MyInvocation.MyCommand.Path változó például tartalmazza a szkript elérési útját és fájlnevét. $MyInvocation.Line tartalmazza a parancsfájlt elindító parancsot, beleértve az összes paramétert és értéket.

    A PowerShell 3.0-tól kezdődően $MyInvocation két új tulajdonsággal rendelkezik, amelyek információkat nyújtanak az aktuális szkriptet meghívó vagy meghívó 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ó vagy meghívó szkript teljes elérési útját és nevét.

  • A PSScriptRoot tartalmazza annak a szkriptnek a könyvtárát, amely meghívta vagy meghívta az aktuális szkriptet.

    A $PSCommandPath és $PSScriptRoot automatikus változóktól eltérően, amelyek az aktuális szkripttel kapcsolatos információkat tartalmaznak, a $MyInvocation változó PSCommandPath és PSScriptRoot tulajdonságai az aktuális szkriptet meghívó vagy meghívó szkriptről tartalmaznak információkat.

  • Adatszakaszok – A Data kulcsszóval elválaszthatja az adatokat a szkriptek logikájától. Az adatszakaszok megkönnyítik a honosítást is. További információ: about_Data_Sections és about_Script_Localization.

  • 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

parancs_elsőbbségéről

a kommentár-alapú segédletről

végrehajtási irányelvek

funkciókról

a modulokról

a_Profilokról

a Küvetelményekről

a_PowerShell-vel való futtatásról

about_Scopes

Script blokkokról

az_aláírásról

Parancs meghívása