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.