Megosztás a következőn keresztül:


Parancsok futtatása a parancssorban

A PowerShell egy parancssori rendszerhéj és egy automatizáláshoz használt szkriptnyelv. A többi rendszerhéjhoz hasonlóan, például bash Linuxon vagy a Windows Command Shellben (cmd.exe) a PowerShell lehetővé teszi a rendszeren elérhető parancsok futtatását, nem csak a PowerShell-parancsokat.

Parancstípusok

Bármely operációs rendszerhéjhoz háromféle parancstípus létezik:

  • Shell nyelvi kulcsszók a rendszerhéj szkriptnyelvének részét képezik.

    • Az bash kulcsszavak például a következők: if, then, else, elifés fi.
    • Az cmd.exe kulcsszavak például a következők: dir, copy, move, ifés echo.
    • A PowerShell-kulcsszavak például a következők: for, foreach, try, catchés trap.

    A rendszerhéj nyelvi kulcsszavai csak a rendszerhéj futtatókörnyezetében használhatók. A rendszerhéjon kívül nincs végrehajtható fájl, amely biztosítja a kulcsszó funkcióit.

  • operációsrendszer-natív parancsok az operációs rendszerben telepített végrehajtható fájlok. A végrehajtható elemek bármilyen parancssori rendszerhéjból futtathatók, például a PowerShellből. Ide tartoznak azok a szkriptfájlok, amelyek megfelelő működéséhez más shell-ek szükségesek. Ha például windowsos kötegszkriptet (.cmd fájlt) futtat a PowerShellben, a PowerShell cmd.exe futtat, és végrehajtás céljából átadja a kötegfájlt.

  • Rendszerhéj környezetspecifikus parancsai olyan külső fájlokban definiált parancsok, amelyek csak a rendszerhéj futtatókörnyezetében használhatók. Ide tartoznak azok a szkriptek, függvények és modulok, amelyek parancsokat adnak hozzá a rendszerhéj-futtatókörnyezethez. A PowerShellben ezeket a modul által hozzáadott parancsokat parancsmagoknak nevezzük (ejtsd : "command-lets").

Natív parancsok futtatása

Bármely natív parancs futtatható a PowerShell parancssorából. A parancsot általában pontosan úgy futtatod, ahogyan a bash vagy cmd.exeesetén tennéd. Az alábbi példa a grep parancs futtatását mutatja be bash Ubuntu Linuxon.

sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

A PowerShell Ubuntu-on való elindítása után ugyanezt a parancsot futtathatja a PowerShell parancssorából:

PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash

Argumentumok átadása natív parancsoknak

A legtöbb shell tartalmazza a változók használatára, a kifejezések kiértékelésére és a karakterláncok kezelésére szolgáló funkciókat. De mindegyik rendszerhéj másképp csinálja ezeket a dolgokat. A PowerShellben minden paraméter egy kötőjel (-) karakterrel kezdődik. A cmd.exelegtöbb parancsparaméter perjel (/) karaktert használ. Más parancssori eszközök szóközöket, kötőjeleket, kétkötőjelet (--) használhatnak.

Mindegyik rendszerhéj saját módon kezeli és értékeli a parancssori karakterláncokat. Ha natív parancsokat futtat a PowerShellben, amelyek azt várják, hogy a sztringek adott módon legyenek idézve, előfordulhat, hogy módosítania kell a sztringek átadásának módját.

További információkért lásd a következő cikkeket:

A PowerShell 7.2 bevezetett egy új kísérleti funkciót PSNativeCommandArgumentPassing, amely javította a natív parancskezelést. További információ: $PSNativeCommandArgumentPassing.

Kimenet és hibák kezelése

A PowerShell több kimeneti streammel is rendelkezik, mint más rendszerhéjak. A bash és cmd.exe shell-eknek stdout és stderrvan. A PowerShell hat kimeneti streammel rendelkezik. További információért lásd about_Redirection és about_Output_Streams.

Általánosságban elmondható, hogy az stdout natív parancs által küldött kimenet a PowerShell Success streambe kerül. Az stderr natív parancs által küldött kimenetet a rendszer a PowerShell hiba streambe küldi.

Ha egy natív parancs nullától eltérő kilépési kóddal rendelkezik, akkor a $? értéke a $false-re van állítva. Ha a kilépési kód nulla, $?$trueértékre van állítva.

A PowerShell 7.2 azonban megváltoztatta ezt a viselkedést. A natív parancsokból átirányított hibarekordok, például átirányítási operátorok (2>&1) használata esetén a rendszer nem írja a PowerShell $Error változójába, és a $ErrorActionPreference beállítási változó nem befolyásolja az átirányított kimenetet.

Számos natív parancs ír a stderr alternatív streamre további információként. Ez a viselkedés zavart okozhat a PowerShellben a hibák keresésekor, és a további kimeneti információk elveszhetnek, ha $ErrorActionPreference olyan állapotra van beállítva, amely elnémítja a kimenetet.

A PowerShell 7.3 új kísérleti funkciót PSNativeCommandErrorActionPreference adott hozzá, amely lehetővé teszi a natív parancsokból származó nem nulla kilépési kódok kezelésének szabályozását. További információ: $PSNativeCommandUseErrorActionPreference.

PowerShell-parancsok futtatása

Ahogy korábban említettük, a PowerShell-parancsokat parancsmagoknak nevezzük. A parancsmagok olyan PowerShell-modulokba vannak gyűjtve, amelyek igény szerint betölthetők. A parancsmagokat bármilyen lefordított .NET-nyelven vagy magának a PowerShell-szkriptnyelvnek a használatával írhatjuk.

Más parancsokat futtató PowerShell-parancsok

A PowerShell híváskezelő (&) lehetővé teszi a változókban tárolt és sztringek vagy szkriptblokkok által képviselt parancsok futtatását. Az operátorral bármilyen natív parancsot vagy PowerShell-parancsot futtathat. Ez akkor hasznos egy szkriptben, ha dinamikusan kell létrehoznia egy natív parancs parancssori paramétereit. További információ: híváskezelő.

A Start-Process parancsmag natív parancsok futtatására használható, de csak akkor használható, ha szabályoznia kell a parancs végrehajtásának módját. A parancsmag paraméterekkel támogatja a következő forgatókönyveket:

  • Parancs futtatása különböző hitelesítő adatokkal
  • Az új folyamat által létrehozott konzolablak elrejtése
  • Irányítsd át a stdin, stdoutés stderr folyamokat.
  • Másik munkakönyvtár használata a parancshoz

Az alábbi példa átirányított bemeneti és kimeneti adatfolyamokkal futtatja a natív parancsot sort.exe.

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

További információért lásd: Start-Process.

Windows rendszeren a Invoke-Item parancsmag végrehajtja a megadott elem alapértelmezett műveletét. Futtat például egy végrehajtható fájlt, vagy megnyit egy dokumentumfájlt a dokumentumfájltípushoz társított alkalmazással. Az alapértelmezett művelet az elem típusától és az elemhez hozzáférést biztosító PowerShell-szolgáltatótól függ.

Az alábbi példa megnyitja a PowerShell-forráskódtárat az alapértelmezett webböngészőben.

Invoke-Item https://github.com/PowerShell/PowerShell

További információ: Invoke-Item.