Udostępnij za pośrednictwem


Poznaj różnice składni Azure CLI w środowiskach Bash, PowerShell i Cmd

Polecenia interfejsu wiersza polecenia platformy Azure można wykonywać w językach skryptów powłoki poleceń Bash, programu PowerShell i systemu Windows (cmd). Istnieją jednak subtelne różnice w skryptach. W tym kroku poradnika dowiesz się, jak utworzyć swoje pierwsze konto Azure Storage i sformatować wartości parametrów dla wszystkich trzech języków skryptowych.

Wymagania wstępne

  • Ukończyłeś wymagania wstępne, aby przygotować swoje środowisko.
  • Masz dostęp do grupy zasobów z uprawnieniami contributor lub wyższymi na poziomie grupy zasobów.

Zwróć uwagę na znaki kontynuacji linii

Większość dokumentacji Azure CLI jest napisana i testowana w Bash przy użyciu Azure Cloud Shell. Jedną z pierwszych kwestii, które należy zapamiętać podczas kopiowania składni interfejsu wiersza polecenia platformy Azure jest zweryfikowanie znaków kontynuacji wiersza dla wybranego języka skryptów, ponieważ nie są one wymienne.

Język skryptów Znak kontynuacji wiersza
Bash Ukośnik odwrotny (\)
PowerShell Backtick (`)
Cmd Daszek (^)

Wskazówka

Przycisk Kopiuj w prawym górnym rogu bloków kodu Azure CLI celowo usuwa ukośnik (\) i odwrotny apostrof (`). Aby skopiować sformatowany blok kodu, użyj klawiatury lub myszy, aby wybrać i skopiować przykład.

Zrozum różnice w składni przy używaniu zmiennych

Składnia używania zmiennych nieznacznie różni się między językami skryptowymi. Oto porównanie:

Przypadek użycia Bash PowerShell Cmd
Utwórz zmienną variableName=varValue $variableName="varValue" set variableName=varValue
Użyj zmiennej jako wartości parametru nazwaZmiennej $variableName %variableName%
Użyj zmiennej w parametrze --query "$variableName" "$variableName" "$variableName"

Istnieje kilka różnych sposobów przekazywania informacji o zmiennych na ekran konsoli, ale echo działa w większości przypadków. Oto porównanie:

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

W kroku 3, Wypełnianie zmiennych do użycia w skryptach, pracujesz nad szczegółowymi przykładami składni zmiennych.

Dowiedz się o różnicach w cudzysłowach między językami skryptowymi

Każdy parametr Azure CLI jest ciągiem znaków. Jednak każdy język skryptowy ma własne reguły obsługi pojedynczych i podwójnych cudzysłowów, spacji i wartości parametrów.

Wartość ciągu Azure CLI PowerShell Cmd
Tekst „text” lub "text" „text” lub "text" "tekst"
Liczba \'50\' ''50'' "50"
logiczny prawda fałsz prawda
Data kalendarzowa '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' lub "{"key":"value"}" "{"key": "value"}" lub "{`"key`": `"value`"}" lub "{""key"": ""value""}" {"key":"value"}

Wiele parametrów Azure CLI akceptuje listę wartości oddzielonych spacją. Ten format ma wpływ na cytowanie.

  • Niesklasyfikowana lista rozdzielona spacjami: --parameterName firstValue secondValue
  • Lista w cudzysłowie oddzielona spacjami: --parameterName "firstValue" "secondValue"
  • Wartości zawierające spację: --parameterName "value1a value1b" "value2a value2b" "value3"

Jeśli nie masz pewności, jak ciąg jest oceniany przez język skryptów, zwróć wartość ciągu do konsoli lub użyj go zgodnie z --debug opisem w artykule Debugowanie poleceń referencyjnych interfejsu wiersza polecenia platformy Azure.

Utwórz konto magazynu, aby zastosować zdobytą wiedzę

W pozostałej części tego kroku samouczka przedstawiono cytowanie reguł w poleceniach interfejsu wiersza polecenia platformy Azure przy użyciu grupy zasobów utworzonej w sekcji Przygotowywanie środowiska dla interfejsu wiersza polecenia platformy Azure. Zamień <msdocs-tutorial-rg-00000000> na nazwę swojej grupy zasobów.

Utwórz konto magazynu Azure do wykorzystania w tym samouczku. W tym przykładzie wygenerowany losowy identyfikator jest przypisany do nazwy konta magazynowego. Jeśli jednak chcesz użyć innej nazwy, zapoznaj się z przeglądem konta magazynowego w celu sprawdzenia zasad nazywania kont magazynowych.

Ważne

Zanim będzie można utworzyć konto magazynowe, dostawca zasobów Microsoft.Storage musi być zarejestrowany w twojej subskrypcji. Aby dowiedzieć się, jak rejestrować typy zasobów, zobacz Register resource provider.

Przykład następnego skryptu demonstruje składnię specyficzną dla języka skryptowego w odniesieniu do następujących elementów:

  • Kontynuacja linii
  • Użycie zmiennych
  • Losowe identyfikatory
  • echo polecenie
# 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

Uwaga / Notatka

Czy został wyświetlony błąd "Nie znaleziono subskrypcji"? Ten błąd występuje, gdy Microsoft.Storage nie jest zarejestrowany w aktywnej subskrypcji. Aby zarejestrować dostawcę zasobów, zobacz Dostawcy i typy zasobów Azure.

Narzędzie Azure CLI zwraca ponad 100 linii JSON jako wynik, gdy tworzony jest nowy konto magazynu. Następujące wyjście słownika JSON ma pominięte niektóre pola dla zwięzłości.

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

Utwórz tagi, aby ćwiczyć różnice w cytowaniu

Korzystając z az storage account update, dodaj tagi, aby pomóc zidentyfikować swoje konto magazynu i dowiedzieć się więcej o różnicach w cytowaniu. Przykłady skryptów demonstrują specyficzną dla języka skryptowego składnię dla następujących:

  • Wartości zawierające spacje
  • Cytowanie pustych spacji
  • Unikanie znaków specjalnych
  • Używanie zmiennych

Parametr --tags akceptuje listę par klucz:wartość oddzielonych spacjami. Zastąp <msdocs-tutorial-rg-00000000> nazwą swojej grupy zasobów i <msdocssa00000000> nazwą swojego konta magazynu Azure.

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

Jeśli nie chcesz nadpisywać poprzednich tagów podczas wykonywania tego kroku samouczka, użyj polecenia az tag update, ustawiając parametr --operation na 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

Porównaj więcej skryptów specyficznych dla języków skryptowych

Przyjrzyj się dokładniej tym różnicom w skryptach. Przykłady te pokazują różnice w cytowaniu dla następujących przypadków:

  • Przekaż ciąg JSON jako wartość parametru
  • Filtruj wyniki za pomocą parametru --query
    • Liczby
    • Wartości logiczne
    • Daty

Przykład parametru zawierającego ciąg JSON. Ten skrypt jest podawany w celach przyszłego odniesienia, ponieważ w tym samouczku nie pracujemy z 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}}}'

Przykład filtrowania wartości numerycznej. Jeśli nie masz maszyny wirtualnej w swojej bieżącej subskrypcji, ten przykład jest podany jako odniesienie na przyszłość.

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

Przykład filtrowania wartości logicznej przy użyciu konta magazynowego utworzonego w tym samouczku.

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

Przykłady filtrowania daty przy użyciu konta magazynu utworzonego w tym samouczku.

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

Debugowanie poleceń referencyjnych Azure CLI

Używanie parametru debugowania

Azure CLI oferuje parametr --debug, który można używać z dowolną komendą. Wynik debugowania jest obszerny, ale dostarcza informacji, w tym następujące:

  • Argumenty polecenia (wartości parametrów) interpretowane przez twój język skryptowy
  • Lokalizacja pliku dziennika
  • Szczegóły wywołania API
  • Błędy wykonania

Jeśli podczas pracy z poleceniami interfejsu wiersza polecenia platformy Azure występują trudności ze zrozumieniem i korygowaniem błędu wykonywania, --debug jest rozwiązaniem, aby zobaczyć kroki, które wykonuje interfejs wiersza polecenia platformy Azure.

Oto część danych wyjściowych debugowania podczas tworzenia konta magazynowego:

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

Aby uzyskać więcej wskazówek dotyczących rozwiązywania problemów, zobacz Rozwiązywanie problemów z Azure CLI.

Użyj polecenia echo

Chociaż --debug dokładnie informuje, co interpretuje Azure CLI, drugą opcją jest zwrócenie wartości wyrażenia do konsoli. Ta metoda jest przydatna podczas weryfikowania wyników elementu --query, który jest szczegółowo opisany w temacie Wypełnianie zmiennych do użycia w skryptach.

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

Rozwiązywanie problemów

Oto typowe błędy, które występują, gdy składnia polecenia odwołania Azure CLI nie jest poprawnie napisana:

  • "Nieprawidłowe żądanie ...{something} jest niepoprawne może być spowodowane przez spację, pojedynczy lub podwójny cudzysłów, lub brak cudzysłowu."
  • Pojawia się komunikat "Unexpected token..." gdy występuje zbędna spacja lub cudzysłów.
  • Błąd "nieprawidłowa wartość jmespath_type" często wynika z niepoprawnego cytowania w parametrze --query.
  • "Kiedy ciąg nie jest poprawnie sformatowany, pojawia się komunikat 'Odwołanie do zmiennej nie jest prawidłowe', co często jest wynikiem łączenia ciągów lub braku znaku ucieczki."
  • "Często 'nierozpoznane argumenty' wynikają z nieprawidłowego znaku kontynuacji wiersza."
  • "Brak wyrażenia po operatorze jednoargumentowym" jest widoczny, gdy brakuje znaku kontynuacji linii.

Aby uzyskać więcej porad dotyczących rozwiązywania problemów, zobacz Rozwiązywanie problemów z poleceniami interfejsu wiersza polecenia platformy Azure.

Uzyskaj więcej szczegółów

Czy chcesz uzyskać więcej szczegółów na temat jednego z zagadnień omówionych w tym kroku samouczka? Skorzystaj z linków w tej tabeli, aby dowiedzieć się więcej.

Temat Dowiedz się więcej
Różnice skryptów Różnice dotyczące cytowania między językami skryptowymi
Zasady cytowania w Bashu
Zasady cytowania w PowerShellu
Rozważania dotyczące uruchamiania Azure CLI w języku skryptowym PowerShell
Porady dotyczące wiersza polecenia systemu Windows
Parametry Używaj cudzysłowów w parametrach Azure CLI
Znajdź więcej przykładów składni dla Bash, PowerShell i Cmd w danych wyjściowych polecenia Query przy użyciu JMESPath
Rozwiązywanie problemów Rozwiązywanie problemów z poleceniami Azure CLI

Następny krok

Teraz, gdy wiesz już, jak napisać składnię interfejsu wiersza polecenia platformy Azure dla powłoki Bash, programu PowerShell i narzędzia Cmd, przejdź do następnego kroku, aby dowiedzieć się, jak wyodrębnić wartości do zmiennej.