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


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) szkriptnyelven 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 szkriptnyelv 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 szkriptnyelv sorfolytatási karaktereit, mivel azok nem cserélhetők fel.

Szkriptnyelv Vonal folytatási karaktere
Erősen megüt 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 kissé eltér a szkriptnyelvek 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 szkriptnyelvek közötti különbségek idézéséről

Minden Azure CLI-paraméter egy sztring. Azonban minden szkriptnyelvnek megvannak a saját szabályai az egyszeri és dupla idézőjelek, szóközök és 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"}" vagy "{"key"": ""value""}" vagy "{"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 tudja biztosan, hogyan értékeli ki a sztringet a szkriptelési nyelv, 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 .

Fontos

A tárfiók létrehozása előtt az Microsoft.Storage erőforrás-szolgáltatónak regisztrálnia kell az előfizetésében. Az erőforrástípusok regisztrálásáról további információt az erőforrás-szolgáltató regisztrálása című témakörben talál.

Ez a következő példaszkript a következő nyelvspecifikus 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

Feljegyzés

"Nem található előfizetés" hibaüzenetet kapott? Ez a hiba akkor fordul elő, ha Microsoft.Storage nincs regisztrálva az aktív előfizetésben. Erőforrás-szolgáltató regisztrálásához tekintse meg az Azure-erőforrás-szolgáltatókat és -típusokat.

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 a szkriptkészítés nyelvspecifikus szintaxisát mutatják be az alábbiakhoz:

  • 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 szkriptelési nyelvspecifikus 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 az alábbiakat is tartalmazza:

  • Parancsargumentumok (paraméterértékek) a szkriptnyelv által értelmezett módon
  • A naplófájl helye
  • API-hívás részletei
  • Végrehajtási hibák

Ha az Azure CLI-parancsok használatakor nehézségekbe ütközik a végrehajtási hibák megértése és javítása, --debug a válasza az Azure CLI végrehajtásának lépéseinek megtekintésére.

A hibakeresési kimenet egy kis része a tárfiók létrehozásakor:

 cli.knack.cli: Command arguments: ['storage', 'account', 'create', '--name', 'msdocssa00000000', '--resource-group', 'msdocs-rg-test', '--location', 'eastus', '--sku', 'Standard_RAGRS', '--kind', 'StorageV2', '--output', 'json', '--debug']
 ...
 cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01'
cli.azure.cli.core.sdk.policies: Request method: 'POST'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json'
cli.azure.cli.core.sdk.policies:     'Content-Length': '73'
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': '00000000-0000-0000-0000-000000000000'
cli.azure.cli.core.sdk.policies:     'CommandName': 'storage account create'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '--name --resource-group --location --sku --kind --output --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.61.0 (DEB) azsdk-python-core/1.28.0 Python/3.11.8 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"name": "msdocssa00000000", "type": "Microsoft.Storage/storageAccounts"}
urllib3.connectionpool: Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool: https://management.azure.com:443 "POST /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01 HTTP/1.1" 200 22
cli.azure.cli.core.sdk.policies: Response status: 200
...

További hibaelhárítási tippekért tekintse meg az Azure CLI hibaelhárítását.

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 hibaelhárítási tippekért tekintse meg az Azure CLI-parancsok hibaelhárítását.

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 A szkriptnyelvek közötti különbségek idézése
Bash-idéző szabályok
PowerShell-idéző szabályok
Az Azure CLI PowerShell-szkriptelési nyelven való futtatásának szempontjai
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
Hibaelhárítás Azure CLI-parancsok hibaelhárítása

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.