Az Azure CLI szintaxisbeli különbségei a Bashben, a PowerShellben és a Cmd-ben

Az Azure CLI-parancsok Bash, PowerShell és Windows parancshéj (Cmd) környezetekben is végrehajthatók. Vannak azonban részszkriptelési különbségek. Ebben az oktatóanyagi lépésben megtudhatja, hogyan hozhatja létre első Azure Storage-fiókját, és hogyan formázhatja mindhárom környezet paraméterértékeit.

Előfeltételek

  • Teljesítette a környezet előkészítésének előfeltételeit.
  • Az erőforráscsoport szintjén hozzáféréssel rendelkezik egy vagy több engedélyekkel rendelkező contributor erőforráscsoporthoz.

Ügyeljen a sor folytatási karaktereinek figyelembe vitelére

A legtöbb Azure CLI-dokumentáció a Bashben van megírva és tesztelve az Azure Cloud Shell használatával. Az Azure CLI szintaxisának másolása során az egyik első dolog, amire emlékezni kell, hogy ellenőrizze a választott környezet sorfolytatási karaktereit, mivel azok nem cserélhetők fel.

Környezet Vonal folytatási karaktere
Bash Fordított perjel (\)
PowerShell Backtick (`)
Cmd Sárgarépa (^)

Tipp.

Az Azure CLI-kódblokkok jobb felső sarkában található Másolás gomb terv szerint eltávolítja a fordított perjelet (\) és a fordított elemet (`). Ha formázott kódblokkot szeretne másolni, a példa kiválasztásához és másolásához használja a billentyűzetet vagy az egeret.

Szintaxisbeli különbségek értelmezése változók használatakor

A változók használatának szintaxisa némileg eltér a környezetek között. Íme egy összehasonlítás:

Használati eset Bash PowerShell Cmd
Változó létrehozása variableName=varValue $variableName="varValue" variableName=varValue beállítása
Változó használata paraméterértékként variableName $variableName %variableName%
Változó használata a paraméterben --query "$variableName" "$variableName" "$variableName"

Többféleképpen is visszaadhatja a változó adatokat a konzol képernyőjén, de echo a legtöbb esetben működik. Íme egy összehasonlítás:

  • Bash: echo $varResourceGroup
  • PowerShell: echo $varResourceGroup
  • Parancs: echo %varResourceGroup%

A harmadik lépésben a szkriptekben használható változók feltöltése, a változószintaxis részletes példáinak végigdolgozása.

Tudnivalók a környezetek közötti különbségek idézéséről

Minden Azure CLI-paraméter egy sztring. Azonban minden környezet saját szabályokkal rendelkezik az egyszeri és a dupla idézőjelek, a szóközök és a paraméterértékek kezelésére.

Sztring Azure CLI PowerShell Cmd
Szöveg "szöveg" vagy "szöveg" "szöveg" vagy "szöveg" "szöveg"
Szám \'50\' ''50'' '50'
Logikai \'true\' ''false'' "igaz"
Dátum '2021-11-15' '2021-11-15' '2021-11-15'
JSON "{"key":"value"}" vagy "{"key":"value"}" "{"key":"value"}" "{"key":"value"}"

Számos Azure CLI-paraméter térelválasztó értéklistát fogad el. Ez hatással van az idézésre.

  • Nemquoted szóközzel elválasztott lista: --parameterName firstValue secondValue
  • Idézett térelválasztó lista: --parameterName "firstValue" "secondValue"
  • Szóközt tartalmazó értékek: --parameterName "value1a value1b" "value2a value2b" "value3"

Ha nem biztos benne, hogy a környezet hogyan értékeli ki a sztringet, adja vissza egy sztring értékét a konzolra, vagy használja --debug az Azure CLI-referenciaparancsok hibakeresése során leírtak szerint.

Tárfiók létrehozása a tanultak alkalmazásához

Az oktatóanyag hátralevő lépése az Azure CLI-parancsok szabályainak idézését mutatja be, és a környezet előkészítése az Azure CLI-hez létrehozott erőforráscsoportot használja. Cserélje le <msdocs-tutorial-rg-00000000> az erőforráscsoport nevére.

Hozzon létre egy Azure Storage-fiókot, amelyet ebben az oktatóanyagban használhat. Ez a példa véletlenszerű azonosítót rendel a tárfiók nevéhez, de ha más nevet szeretne használni, tekintse meg a tárfiókok névszabályainak áttekintését .

Ez a következő példaszkript az alábbi környezetspecifikus szintaxist mutatja be:

  • Sor folytatása
  • Változók használata
  • Véletlenszerű azonosítók
  • echo parancs
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location=eastus
resourceGroup="<msdocs-tutorial-rg-00000000>"
storageAccount="msdocssa$randomIdentifier"

# Create a storage account.
echo "Creating storage account $storageAccount in resource group $resourceGroup"
az storage account create --name $storageAccount \
                          --resource-group $resourceGroup \
                          --location $location \
                          --sku Standard_RAGRS \
                          --kind StorageV2 \
                          --output json

Az Azure CLI több mint 100 sor JSON-t ad vissza kimenetként egy új tárfiók létrehozásakor. Az alábbi JSON-szótárkimenetben a rövidség kedvéért kihagyott mezők szerepelnek.

{
"accessTier": "Hot",
"allowBlobPublicAccess": false,
"creationTime": "yyyy-mm-ddT19:14:26.962501+00:00",
"enableHttpsTrafficOnly": true,
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ msdocs-tutorial-rg-00000000/providers/Microsoft.Storage/storageAccounts/msdocssa00000000",
"keyCreationTime": {
  "key1": "yyyy-mm-ddT19:14:27.103127+00:00",
  "key2": "yyyy-mm-ddT19:14:27.103127+00:00"
},
"kind": "StorageV2",
"location": "eastus",
"name": "msdocssa00000000",
"primaryEndpoints": {
  "blob": "https://msdocssa00000000.blob.core.windows.net/"
},
"primaryLocation": "eastus",
"provisioningState": "Succeeded",
"resourceGroup": "msdocs-tutorial-rg-00000000",
"sku": {
  "name": "Standard_RAGRS",
  "tier": "Standard"
},
"statusOfPrimary": "available",
"statusOfSecondary": "available",
"tags": {},
"type": "Microsoft.Storage/storageAccounts"
}

Címkék létrehozása az idézőeltérés gyakorlatához

Az az storage account update használatával címkéket adhat hozzá a tárfiók azonosításához és a különbségek idézéséhez. Ezek a példaszkriptek az alábbi környezetspecifikus szintaxist mutatják be:

  • Szóközöket tartalmazó értékek
  • Üres szóközök idézése
  • Speciális karakterek menekülése
  • Változók használata

A --tags paraméter a kulcs:érték párok szóközzel elválasztott listáját fogadja el. Cserélje le <msdocs-tutorial-rg-00000000> az erőforráscsoport nevét és <msdocssa00000000> az Azure Storage-fiók nevét.

# Create new tags. This syntax works with or without quotes around each key-value pair.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags Team=t1 Environment=e1

# Create new tags containing spaces. You must use quotes.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Floor number=f1" "Cost center=cc1"

# Create a new tag with an empty value.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Department="''""

# Create a new tag containing special characters resulting in "Path": "$G:\\myPath".
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Path=\$G:\myPath"

# Create a tag from a variable.
newTag="tag1=tag value with spaces"
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "$newTag"

Ha nem szeretné felülírni az előző címkéket az oktatóanyag lépéseinek végrehajtása során, használja az az címkefrissítési parancsot, amely a paramétert a --operation következőre mergeállítja.

# Get the resource ID of your storage account.
saID=$(az resource show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa00000000> \
                        --resource-type Microsoft.Storage/storageAccounts \
                        --query "id" \
                        --output tsv)

echo My storage account ID is $saID

# Append new tags.
az tag update --resource-id $saID \
              --operation merge \
              --tags <tagName>=<tagValue>

# Get a list of all tags.
az tag list --resource-id $saID

További környezetspecifikus szkriptek összehasonlítása

Tekintse meg részletesebben ezeket a szkriptkülönbségeket. Ezek a példák az alábbi idézetek közötti különbségeket mutatják be:

  • JSON-sztring átadása paraméterértékként
  • Eredmények szűrése a --query paraméterrel
    • Telefonszámok
    • Logikai értékek
    • Dátumok

Példa egy JSON-sztringet tartalmazó paraméterre. Ezt a szkriptet a rendszer későbbi referenciaként adja meg, mivel ebben az oktatóanyagban nem dolgozunk.az rest

az rest --method patch \
        --url https://management.azure.com/subscriptions/<mySubscriptionID>/resourceGroups/<myResourceGroup>/providers/Microsoft.HybridCompute/machines/<machineName>?api-version=yyyy-mm-dd-preview \
        --resource https://management.azure.com/ \
        --headers Content-Type=application/json \
        --body '{"properties": {"agentUpgrade": {"enableAutomaticUpgrade": false}}}'

Példa egy numerikus érték szűrésére. Ha nem rendelkezik virtuális géppel az aktuális előfizetésében, ezt a példát a rendszer későbbi használatra adja meg.

az vm list --resource-group <myResourceGroup> \
           --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
           --output table

Példa logikai érték szűrésére az oktatóanyagban létrehozott tárfiók használatával.

az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?allowBlobPublicAccess == \`true\`].id"

Példák a dátum szűrésére az oktatóanyagban létrehozott tárfiók használatával.

# include time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15T19:14:27.103127+00:00'].{saName:name, saID: id, sku: sku.name}"

# exclude time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15'].{saName:name, saID: id, sku: sku.name}"

# subtract days and use a variable
saDate=$(date +%F -d "-30days")
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='$saDate'].{saName:name, saID: id, sku: sku.name}"

Az Azure CLI referenciaparancsainak hibakeresése

Paraméter használata --debug

Az Azure CLI egy olyan paramétert --debug kínál, amely bármely paranccsal használható. A hibakeresési kimenet kiterjedt, de több információt nyújt a végrehajtási hibákról. A Bash clear paranccsal eltávolíthatja a konzolkimenetet a tesztek között.

Ezek a példák az Azure CLI által a Python szintaxisában kapott tényleges argumentumokat mutatják be.

Ez a példa a Bashben és a PowerShellben is helyes .

az '{"key":"value"}' --debug

Tekintse meg, hogy az Azure CLI mit értelmez a Command arguments kimenet sorában.

Command arguments: ['{"key":"value"}', '--debug']

Ez a második példa is helyes. A Bash clear paranccsal eltávolíthatja a konzolkimenetet a tesztek között.

clear
az "{\"key\":\"value\"}" --debug
Command arguments: ['{"key":"value"}', '--debug']

A következő két példa helytelen, mivel a Bash idézőjeleket és szóközöket értelmez.

Helytelen formátum Probléma Konzolkimenet
az {"key":"value"} --debug Hiányzó idézőjelek vagy feloldó karakterek Parancsargumentumok: "{key:value}", "--debug"
az {"key": "value"} --debug Hiányzó idézőjelek vagy feloldó karakterek, és további szóközöket tartalmaz Parancsargumentumok: [{key:', 'value}', '--debug]

A parancs használata echo

Bár --debug pontosan megadja, hogy mit értelmez az Azure CLI, a második lehetőség egy kifejezés értékének visszaadása a konzolra. Ez a módszer akkor hasznos, ha ellenőrzi, hogy ennek eredményei --query részletesen szerepelnek-e a változók feltöltése szkriptekben való használatra.

strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}

Hibaelhárítás

Az alábbi gyakori hibák, ha egy Azure CLI-referenciaparancs szintaxisa nem megfelelően van megírva:

  • "Hibás kérés ... {valami} érvénytelen" lehet szóköz, egy- vagy dupla idézőjel, vagy idézőjel hiánya.

  • "Váratlan jogkivonat..." akkor látható, ha van egy extra hely vagy idézet.

  • Az "Érvénytelen jmespath_type érték" hiba gyakran helytelen idézésből ered a --query paraméterben.

  • "Érvénytelen változóhivatkozás" akkor érkezik, ha egy sztring nem megfelelően van formázva összefűzés vagy hiányzó feloldó karakter miatt.

  • A "nem felismert argumentumokat" gyakran helytelen sorfolytatási karakter okozza.

  • A "Hiányzó kifejezés a nem szereplő operátor után" kifejezés akkor látható, ha hiányzik egy sor folytatási karaktere.

További részletek

Szeretne részletesebben is megtudni az oktatóanyag lépéseinek egyik témakörét? További információért használja a táblázatban található hivatkozásokat.

Tárgy További információ
Szkriptelési különbségek Bash-idéző
PowerShell-idézetek
A PowerShell-lel kapcsolatos problémák idézete
Windows parancssori tippek
Paraméterek Idézőjelek használata az Azure CLI-paraméterekben
További szintaxisbeli példák a Bash, a PowerShell és a Cmd kifejezésre a Lekérdezés parancs kimenetében a JMESPath használatával

Következő lépés

Most, hogy megtanulta, hogyan írhat Azure CLI-szintaxist a Bashhez, a PowerShellhez és a Cmdhez, folytassa a következő lépéssel, hogy megtanulja, hogyan nyerhet ki értékeket egy változóból.