Share via


Az Azure CLI PowerShell-környezetben való futtatásának szempontjai

Az Azure CLI egy olyan eszköz, amellyel Azure-erőforrások kezelhetők Bash- és PowerShell-környezetben futó Azure CLI-referenciaparancsokkal. A környezetek közötti paraméterformázásban azonban vannak kisebb szintaktikai különbségek, amelyek váratlan eredményeket eredményezhetnek. A cikk célja, hogy segítsen az Azure CLI szintaxishibáinak elhárításában PowerShell-környezetben végzett munka során.

Ez a cikk a következő környezetekben végrehajtott Azure CLI-parancsok szintaxisbeli különbségeit hasonlítja össze:

Ha még csak most ismerkedik a parancssori felülettel, az eszköz és a környezet közötti különbségelés zavaró lehet. A megfelelő parancssori eszköz kiválasztása jó összehasonlítást biztosít.

Előfeltételek

Ez a cikk olvasásra és tanulásra szolgál. Ha azonban futtatni szeretné a példákat, válassza ki a lapot a Prepare your environments cikkben használt környezetek telepítéséhez.

Fontos

Ha olyan Azure CLI-szkripttel rendelkezik, amely hibát okoz, fontolja meg, hogy a környezet, amelyben dolgozik, hogyan elemzi az Azure CLI parancs szintaxisát.

Szóközök átadása az Azure CLI-paraméterekben

Az Azure CLI-ben, amikor egy szóközt tartalmazó paraméterértéket kell átadnia, az operációs rendszerek és a környezetek közötti különbségek vannak idézve. Ebben a példában használja az az storage-fióklistát , és nevezze át a kimeneti oszlopokat egy szóközt tartalmazó szóval.

Ebben a példában figyelje meg az egyetlen idézőjel ('...') burkolót beágyazott dupla idézőjelekkel ("..."). Ez a példa linuxos PowerShellben is működik.

az storage account list --query '[].{"SA Name":name, "Primary endpoint":primaryEndpoints.blob}' --output table

Ha szűrőt szeretne hozzáadni, a szintaxis megváltozik. Figyelje meg, hogy ez a példa dupla idézőjelek ("...") közé csomagolja a --query paraméter értékét, és fordított perjelet (\) használ. Ez a szkript nem fut a PowerShellben.

 az storage account list --query "[?creationTime >='2024-02-01'].{\"SA Name\":name,\"Primary endpoint\":primaryEndpoints.blob}" --output table

Ha csak powerShell-környezetben próbálta futtatni a szűrőszintaxisát, hibaüzenetet argument --query: invalid jmespath_type value: "[?creationTime >=..."kapott. Linux-környezeten belüli Bash esetén azonban a kimenet a következőhöz hasonló:

SA Name           Primary Endpoint
-----------       -----------------
msdocssa00000000  https://msdocssa000000000.blob.core.windows.net/

Paraméterek átadása lekérdezési sztringet tartalmazó URL-címben

Az URL-címek kérdőjelei az URL-cím végét és a lekérdezési sztring elejét jelölik. Íme egy példa, amely megnyitja a Learn 3. lépését az Azure CLI használatához:

https://learn.microsoft.com/en-us/cli/azure/account?view=azure-cli-2020-09-01-hybrid.

Az ?view=azure-cli-2020-09-01-hybrid eredmények az Azure CLI referenciatartalma kívánt verziójában lesznek.

Ha Azure CLI-parancsokat hajt végre PowerShell-környezetben, a PowerShell lehetővé teszi, hogy a kérdőjelek egy változónév részét képezze. Ez zavart okozhat az Azure CLI paraméterértékeiben.

Íme egy példa az Azure REST API használata című cikkből:

Figyelje meg, hogy a $containerRegistryName?api-version Bashben hiba nélkül összefűz.

# Script for a Bash environment

# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
subscriptionId="00000000-0000-0000-0000-000000000000"
resourceGroup="msdocs-app-rg$randomIdentifier"
containerRegistryName="msdocscr$randomIdentifier"

# prior to this GET example, the resource group and container registry were created in the article.

az rest --method get --url https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$containerRegistryName?api-version=2023-01-01-preview

Speciális PowerShell-karaktert tartalmazó paraméterek átadása

A PowerShellnek vannak speciális karakterei, például az At (@) szimbólum. Az Azure CLI PowerShellben való futtatásához adjon hozzá egy háttérjelet ` a speciális karakter előtt, hogy elkerülje azt. Az értéket egyetlen (') vagy dupla (") idézőjelbe is csatolhatja.

Az alábbi három példa a PowerShellben fog működni:

  • parameterName '@parameters.json
  • parameterName "@parameters.json"
  • parameterName "@parameters.json"

Ez a példa nem működik a PowerShellben:

  • parameterName @parameters.json

JSON-t tartalmazó paraméterek átadása

Összetett argumentumok, például JSON-sztringek esetén ajánlott az Azure CLI konvenciójával @<file> betölteni egy fájlból a rendszerhéj értelmezésének megkerülése érdekében. Vegye figyelembe, hogy az At (@) szimbólum egy splatting operátor a PowerShellben, ezért idézni kell.

Az az hirdetésalkalmazás-létrehozásban jó példák találhatók, amelyek JSON-fájltartalmat és parancs-példákat is tartalmaznak. Íme egy kódrészlet:

# Script for a Bash environment

az ad app create --display-name myTestAppName \
    --is-fallback-public-client \
    --required-resource-accesses @manifest.json

Kulcs:érték párokat tartalmazó paraméterek átadása

Egyes Azure CLI-paraméterértékekhez, például az Azure-erőforráscímkékhez kulcs:érték párokra van szükség. Ha szóközt key vagy value speciális karaktert tartalmaz, a Bash és a PowerShell szintaxisa nem mindig egyezik meg.

Az Azure CLI-oktatóanyag használatának elsajátításához tekintse meg a Címkék létrehozása című témakört. Ez az oktatóanyag lépés példákat ad a Bash, a PowerShell és a Cmd használatára a következő kulcs:értékpáros forgatókönyvekhez:

  • Terek
  • üres értékek
  • speciális karakterek
  • változók

Az Azure CLI hibakezelése a PowerShellben

Azure CLI-parancsokat futtathat a PowerShellben a Megfelelő Azure parancssori eszköz kiválasztása című cikkben leírtak szerint. Ha igen, győződjön meg arról, hogy ismeri az Azure CLI-hibakezelést a PowerShellben. Az Azure CLI nem hoz létre kivételeket a PowerShell számára.

Egy másik lehetőség az automatikus változó használata $? . Ez a változó a legutóbbi parancs állapotát tartalmazza. Ha az előző parancs sikertelen, $? akkor a következő érték van $Falsemegadva: . További információ: about_Automatic_Variables.

Az alábbi példa bemutatja, hogyan működik ez az automatikus változó a hibakezeléshez:

# Script for a PowerShell environment

az group create --name MyResourceGroup
if ($? -eq $false) {
    Write-Error "Error creating resource group."
}

A az parancs meghiúsul, mert hiányzik a szükséges --location paraméter. A feltételes utasítás hamisnak találja, $? és hibát ír.

Ha a kulcsszavakat és catch a try kulcsszavakat szeretné használni, kivételt hozhat throw létre a blokk számára a try fogáshoz:

# Script for a PowerShell environment

$ErrorActionPreference = "Stop"
try {
    az group create --name MyResourceGroup
    if ($? -eq $false) {
        throw 'Group create failed.'
    }
}
catch {
    Write-Error "Error creating the resource group."
}
$ErrorActionPreference = "Continue"

Alapértelmezés szerint a PowerShell csak a megszüntetési hibákat rögzíti. Ez a példa úgy állítja be a $ErrorActionPreference globális változót, hogy Stop a PowerShell kezelni tudja a hibát.

A feltételes utasítás ellenőrzi a változót $? , hogy az előző parancs nem sikerült-e. Ha igen, a throw kulcsszó kivételt hoz létre a fogáshoz. A catch blokk használható hibaüzenet írására vagy a hiba kezelésére.

A példa visszaállítja $ErrorActionPreference az alapértelmezett értékét.

A PowerShell-hibakezeléssel kapcsolatos további információkért lásd : Minden, amit tudni szeretne a kivételekről.

Lapkiegészítés engedélyezése a PowerShellben

A tabulátorkiegészítés, más néven "Azure CLI-kiegészítések" a bemenetek kiegészítését biztosítják, hogy tippeket adjanak, lehetővé tegyék a felderítést és felgyorsíthassák a bemeneti bevitelt. A tabulátorbillentyűvel automatikusan beszúrhatók a parancssorba a parancsnevek, a parancscsoportok nevei, a paraméterek és bizonyos paraméterértékek.

A tabulátorkizárás alapértelmezés szerint engedélyezve van az Azure Cloud Shellben és a legtöbb Linux-disztribúcióban. Az Azure CLI 2.49-es verziójától kezdve engedélyezheti az Azure CLI lapkiegészítését a PowerShellben. Tegye a következők egyikét:

  1. Hozza létre vagy szerkessze a változóban $PROFILEtárolt profilt. A legegyszerűbb módszer a PowerShellben való futtatás notepad $PROFILE . További információ: A profil és a profilok létrehozása és a végrehajtási szabályzat.

  2. Adja hozzá a következő kódot a PowerShell-profilhoz:

    Register-ArgumentCompleter -Native -CommandName az -ScriptBlock {
        param($commandName, $wordToComplete, $cursorPosition)
        $completion_file = New-TemporaryFile
        $env:ARGCOMPLETE_USE_TEMPFILES = 1
        $env:_ARGCOMPLETE_STDOUT_FILENAME = $completion_file
        $env:COMP_LINE = $wordToComplete
        $env:COMP_POINT = $cursorPosition
        $env:_ARGCOMPLETE = 1
        $env:_ARGCOMPLETE_SUPPRESS_SPACE = 0
        $env:_ARGCOMPLETE_IFS = "`n"
        $env:_ARGCOMPLETE_SHELL = 'powershell'
        az 2>&1 | Out-Null
        Get-Content $completion_file | Sort-Object | ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)
        }
        Remove-Item $completion_file, Env:\_ARGCOMPLETE_STDOUT_FILENAME, Env:\ARGCOMPLETE_USE_TEMPFILES, Env:\COMP_LINE, Env:\COMP_POINT, Env:\_ARGCOMPLETE, Env:\_ARGCOMPLETE_SUPPRESS_SPACE, Env:\_ARGCOMPLETE_IFS, Env:\_ARGCOMPLETE_SHELL
    }
    
  3. A menüben elérhető összes lehetőség megjelenítéséhez adja hozzá Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete a PowerShell-profiljához.

Lásd még