Dela via


Lär dig skillnader i Azure CLI-syntax i Bash, PowerShell och Cmd

Azure CLI-kommandon kan köras i skriptspråken Bash, PowerShell och Windows-kommandogränssnittet (Cmd ). Det finns dock skillnader i subtila skript. I det här självstudiesteget får du lära dig hur du skapar ditt första Azure Storage-konto och formaterar parametervärden för alla tre skriptspråken.

Förutsättningar

  • Du har slutfört förutsättningarna för att förbereda din miljö.
  • Du har åtkomst till en resursgrupp med contributor eller högre behörigheter på resursgruppsnivå.

Tänk på radfortsättningstecken

De flesta Azure CLI-dokumentationen skrivs och testas i Bash med Hjälp av Azure Cloud Shell. En av de första saker att komma ihåg när du kopierar Azure CLI-syntax är att verifiera radfortsättningstecken för det valda skriptspråket eftersom de inte är utbytbara.

skriptspråk Radfortsättningstecken
Våldsamt slag Omvänt snedstreck (\)
PowerShell Backtick (`)
Cmd Morot (^)

Dricks

Knappen Kopiera i det övre högra hörnet av Azure CLI-kodblock tar bort omvänt snedstreck (\) och backtick (`) avsiktligt. Om du vill kopiera ett formaterat kodblock använder du tangentbordet eller musen för att välja och kopiera exemplet.

Förstå syntaxskillnader när du använder variabler

Syntaxen för att använda variabler varierar något mellan skriptspråk. Här är en jämförelse:

Användningsfall Bash PowerShell Cmd
Skapa variabel variableName=varValue $variableName="varValue" ange variableName=varValue
Använda variabel som parametervärde variableName $variableName %variableName%
Använda variabel i --query parameter "$variableName" "$variableName" "$variableName"

Det finns flera olika sätt att returnera variabel information till konsolskärmen, men echo fungerar i de flesta fall. Här är en jämförelse:

  • Bash: eko $varResourceGroup
  • PowerShell: eko $varResourceGroup
  • Cmd: echo %varResourceGroup%

I steg tre, Fyll i variabler för användning i skript, går du igenom djupgående exempel på variabelsyntax.

Lär dig mer om att citera skillnader mellan skriptspråk

Varje Azure CLI-parameter är en sträng. Varje skriptspråk har dock egna regler för hantering av enkla och dubbla citattecken, blanksteg och parametervärden.

Strängvärde Azure CLI PowerShell Cmd
Text "text" eller "text" "text" eller "text" "text"
Antal \'50\' ''50'' "50"
Booleskt \'true\' ''false'' "sant"
Datum '2021-11-15' '2021-11-15' '2021-11-15'
JSON {"key":"value"} eller "{"key":"value"}" {"key": "value"} eller "{'"key"": '"value'"}" eller "{""key"": ""value""}" "{"key":"value"}"

Många Azure CLI-parametrar accepterar en utrymmesavgränsad lista med värden. Detta påverkar citat.

  • Ociterad blankstegsavgränsad lista: --parameterName firstValue secondValue
  • Lista med blankstegsavgränsad: --parameterName "firstValue" "secondValue"
  • Värden som innehåller ett blanksteg: --parameterName "value1a value1b" "value2a value2b" "value3"

Om du inte är säker på hur strängen kommer att utvärderas av skriptspråket, returnerar du värdet för en sträng till konsolen eller använder --debug enligt beskrivningen i Felsöka Azure CLI-referenskommandon.

Skapa ett lagringskonto för att tillämpa det du har lärt dig

Resten av det här självstudiesteget visar hur du citerar regler i Azure CLI-kommandon och använder resursgruppen som skapades i Förbered din miljö för Azure CLI. Ersätt <msdocs-tutorial-rg-00000000> med namnet på resursgruppen.

Skapa ett Azure Storage-konto som ska användas i den här självstudien. Det här exemplet tilldelar ett slumpmässigt ID till lagringskontots namn, men om du vill använda ett annat namn kan du läsa Översikt över lagringskonto för regler för lagringskontonamn.

Viktigt!

Innan du kan skapa ett lagringskonto måste resursprovidern Microsoft.Storage registreras i din prenumeration. Mer information om hur du registrerar resurstyper finns i Registrera resursprovider.

I nästa skriptexempel visas skriptspråkspecifik syntax för följande:

  • Radfortsättning
  • Variabel användning
  • Slumpmässiga identifierare
  • echo kommando`
# 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

Kommentar

Fick du just felet "Det gick inte att hitta prenumerationen"? Det här felet uppstår när Microsoft.Storage det inte är registrerat i den aktiva prenumerationen. Information om hur du registrerar en resursprovider finns i Azure-resursprovidrar och typer.

Azure CLI returnerar över 100 rader JSON som utdata när ett nytt lagringskonto skapas. Följande JSON-ordlisteutdata innehåller fält som utelämnats för korthet.

{
"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"
}

Skapa taggar för att öva på att citera skillnader

Med az storage account update lägger du till taggar som hjälper dig att identifiera ditt lagringskonto och lära dig mer om att citera skillnader. Dessa skriptexempel visar skriptspråksspecifik syntax för följande:

  • Värden som innehåller blanksteg
  • Citera tomma blanksteg
  • Undfly specialtecken
  • Använda variabler

Parametern --tags accepterar en blankstegsavgränsad lista över nyckel:värde-par. Ersätt <msdocs-tutorial-rg-00000000> med namnet på resursgruppen och <msdocssa00000000> med namnet på ditt Azure Storage-konto.

# 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"

Om du inte vill skriva över tidigare taggar medan du går igenom det här självstudiesteget använder du kommandot az tag update och anger parametern --operation till merge.

# 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

Jämför fler skriptspråkspecifika skript

Ta en djupare titt på dessa skriptskillnader. De här exemplen visar på skillnader för följande:

  • Skicka en JSON-sträng som ett parametervärde
  • Filtrera resultat med parametern --query
    • Nummer
    • Booleska värden
    • Datum

Exempel på en parameter som innehåller en JSON-sträng. Det här skriptet ges för framtida referens eftersom vi inte arbetar med az rest i den här självstudien.

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}}}'

Exempel på filtrering för ett numeriskt värde. Om du inte har en virtuell dator i din aktuella prenumeration ges det här exemplet för framtida referens.

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

Exempel på filtrering av ett booleskt värde med hjälp av lagringskontot som skapades i den här självstudien.

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

Exempel på filtrering av ett datum med lagringskontot som skapades i den här självstudien.

# 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}"

Felsöka Azure CLI-referenskommandon

Använda --debug parameter

Azure CLI erbjuder en --debug parameter som kan användas med valfritt kommando. Felsökningsutdata är omfattande, men det ger dig information, inklusive följande:

  • Kommandoargument (parametervärden) som tolkas av skriptspråket
  • Plats för loggfilen
  • API-anropsinformation
  • Körningsfel

Om du har svårt att förstå och korrigera ett körningsfel när du arbetar med Azure CLI-kommandon är --debug svaret att se de steg som Azure CLI kör.

Här är en liten del av felsökningsutdata när du skapar ett lagringskonto:

 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
...

Mer felsökningstips finns i Felsöka Azure CLI.

Använd echo kommando

Även om --debug det visar exakt vad Azure CLI tolkar är ett andra alternativ att returnera värdet för ett uttryck till konsolen. Den här metoden är användbar när du verifierar resultatet av --query som beskrivs i detalj i Fyll i variabler för användning i skript.

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

Felsökning

Här är vanliga fel när en Azure CLI-referenskommandosyntax inte skrivs korrekt:

  • "Felaktig begäran ... {something} är ogiltigt" kan orsakas av blanksteg, enkla eller dubbla citattecken eller brist på citattecken.

  • "Oväntad token..." visas när det finns ett extra utrymme eller citattecken.

  • Felet "Ogiltigt jmespath_type värde" kommer ofta från felaktig citat i parametern --query .

  • "Variabelreferensen är ogiltig" tas emot när en sträng inte formateras korrekt ofta på grund av sammanfogning eller ett escape-tecken som saknas.

  • "Okända argument" orsakas ofta av ett felaktigt radfortsättningstecken.

  • "Saknade uttryck efter unary-operatorn" visas när ett radfortsättningstecken saknas.

Ytterligare felsökningstips finns i Felsöka Azure CLI-kommandon.

Få mer information

Vill du ha mer information om något av de ämnen som beskrivs i det här självstudiesteget? Använd länkarna i den här tabellen om du vill veta mer.

Ämne Läs mer
Skillnader i skript Citera skillnader mellan skriptspråk
Bash citerar regler
Regler för PowerShell-citat
Överväganden för att köra Azure CLI på ett PowerShell-skriptspråk
Kommandoradstips för Windows
Parametrar Använda citattecken i Azure CLI-parametrar
Hitta fler syntaxexempel på Bash, PowerShell och Cmd i Frågekommandoutdata med JMESPath
Felsökning Felsöka Azure CLI-kommandon

Nästa steg

Nu när du har lärt dig hur du skriver Azure CLI-syntax för Bash, PowerShell och Cmd går du vidare till nästa steg för att lära dig hur du extraherar värden till en variabel.