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á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.