Poznaj różnice składni interfejsu wiersza polecenia platformy Azure w powłokach Bash, programie PowerShell i programie Cmd

Polecenia interfejsu wiersza polecenia platformy Azure można wykonywać w środowiskach powłoki poleceń Bash, PowerShell i Windows (Cmd). Istnieją jednak różnice między skryptami podrzędnymi. W tym kroku samouczka dowiesz się, jak utworzyć pierwsze konto usługi Azure Storage i sformatować wartości parametrów dla wszystkich trzech środowisk.

Wymagania wstępne

  • Zostały spełnione wymagania wstępne dotyczące przygotowywania środowiska.
  • Masz dostęp do grupy zasobów z uprawnieniami contributor lub wyższymi na poziomie grupy zasobów.

Należy pamiętać o znakach kontynuacji wiersza

Większość dokumentacji interfejsu wiersza polecenia platformy Azure jest napisana i przetestowana w powłoce Bash przy użyciu usługi Azure Cloud Shell. Jedną z pierwszych rzeczy, które należy zapamiętać podczas kopiowania składni interfejsu wiersza polecenia platformy Azure, jest sprawdzenie znaków kontynuacji wiersza dla wybranego środowiska, ponieważ nie są one wymienne.

Środowisko Znak kontynuacji wiersza
Bash Ukośnik odwrotny (\)
Program PowerShell Backtick (`)
Cmd Marchew (^)

Napiwek

Przycisk Kopiuj w prawym górnym rogu bloków kodu interfejsu wiersza polecenia platformy Azure usuwa ukośnik odwrotny (\) i backtick (`) zgodnie z projektem. Jeśli chcesz skopiować sformatowany blok kodu, użyj klawiatury lub myszy, aby wybrać i skopiować przykład.

Omówienie różnic składni podczas korzystania ze zmiennych

Składnia używania zmiennych różni się nieco między środowiskami. Oto porównanie:

Przypadek użycia Bash PowerShell Cmd
Tworzenie zmiennej variableName=varValue $variableName="varValue" set variableName=varValue
Użyj zmiennej jako wartości parametru Variablename $variableName %variableName%
Używanie zmiennej w parametrze --query "$variableName" "$variableName" "$variableName"

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

  • Powłoka Bash: echo $varResourceGroup
  • PowerShell: echo $varResourceGroup
  • Cmd: echo %varResourceGroup%

W kroku trzecim wypełnij zmienne do użycia w skryptach, korzystając ze szczegółowych przykładów składni zmiennych.

Dowiedz się więcej o cytowaniu różnic między środowiskami

Każdy parametr interfejsu wiersza polecenia platformy Azure jest ciągiem. Jednak każde środowisko ma własne reguły obsługi pojedynczych i podwójnych cudzysłowów, spacji i wartości parametrów.

Wartość ciągu Interfejs wiersza polecenia platformy Azure PowerShell Cmd
Text "text" lub "text" "text" lub "text" "tekst"
Liczba \'50\' ''50'' '50'
Wartość logiczna \'true\' ''false'' "true"
Data '2021-11-15' '2021-11-15' '2021-11-15'
JSON "{"key":"value"}" lub "{"key":"value"}" "{"key":"value"}" "{"key":"value"}"

Wiele parametrów interfejsu wiersza polecenia platformy Azure akceptuje rozdzielaną spacjami listę wartości. Ma to wpływ na cytowanie.

  • Lista rozdzielona spacjami: --parameterName firstValue secondValue
  • Lista rozdzielona spacjami: --parameterName "firstValue" "secondValue"
  • Wartości zawierające spację: --parameterName "value1a value1b" "value2a value2b" "value3"

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

Tworzenie konta magazynu w celu zastosowania poznanych informacji

W pozostałej części tego kroku samouczka przedstawiono cytowanie reguł w poleceniach interfejsu wiersza polecenia platformy Azure i użyto grupy zasobów utworzonej w sekcji Przygotowywanie środowiska dla interfejsu wiersza polecenia platformy Azure. Zastąp <msdocs-tutorial-rg-00000000> ciąg nazwą grupy zasobów.

Utwórz konto usługi Azure Storage do użycia w tym samouczku. W tym przykładzie przypisano losowy identyfikator do nazwy konta magazynu, ale jeśli chcesz użyć innej nazwy, zobacz Omówienie konta magazynu dla reguł nazw kont magazynu.

W tym następnym przykładzie skryptu przedstawiono składnię specyficzną dla środowiska dla następujących elementów:

  • Kontynuacja wiersza
  • Użycie zmiennej
  • Identyfikatory losowe
  • 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

Interfejs wiersza polecenia platformy Azure zwraca ponad 100 wierszy kodu JSON jako dane wyjściowe po utworzeniu nowego konta magazynu. Następujące dane wyjściowe słownika JSON zawierają pola pominięte w celu 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"
}

Tworzenie tagów w celu praktykowania różnic w cudzysłów

Za pomocą polecenia az storage account update dodaj tagi, aby ułatwić identyfikowanie konta magazynu i uzyskiwanie informacji na temat cytowania różnic. Te przykłady skryptów przedstawiają składnię specyficzną dla środowiska dla następujących elementów:

  • Wartości zawierające spacje
  • Cudzysłów puste spacje
  • Ucieczka znaków specjalnych
  • Używanie zmiennych

Parametr --tags akceptuje rozdzielaną spacjami listę par key:value. Zastąp <msdocs-tutorial-rg-00000000> ciąg nazwą grupy zasobów i <msdocssa00000000> nazwą konta usługi Azure Storage.

# 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 zastępować poprzednich tagów podczas pracy z tym krokiem samouczka, użyj polecenia az tag update , ustawiając parametr na --operationmergewartość .

# 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ównanie większej liczby skryptów specyficznych dla środowiska

Przyjrzyj się bliżej tym różnicom skryptów. W poniższych przykładach pokazano różnice w cudzysłów:

  • Przekazywanie ciągu JSON jako wartości parametru
  • Filtrowanie wyników za pomocą parametru --query
    • Liczby
    • Wartości logiczne
    • Daty

Przykład parametru zawierającego ciąg JSON. Ten skrypt jest podawany do użytku w przyszłości, ponieważ nie pracujemy z az rest tym samouczkiem.

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 liczbowej. Jeśli nie masz maszyny wirtualnej w bieżącej subskrypcji, ten przykład zostanie podany do użycia w przyszłości.

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 magazynu 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 interfejsu wiersza polecenia platformy Azure

Użyj --debug parametru

Interfejs wiersza polecenia platformy Azure oferuje --debug parametr, który może być używany z dowolnym poleceniem. Dane wyjściowe debugowania są obszerne, ale zawierają więcej informacji na temat błędów wykonywania. Użyj polecenia Bash clear , aby usunąć dane wyjściowe konsoli między testami.

Te przykłady pokazują rzeczywiste argumenty odebrane przez interfejs wiersza polecenia platformy Azure w składni języka Python.

Ten przykład jest poprawny zarówno w powłoce Bash, jak i programie PowerShell.

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

Zobacz, co interfejs wiersza polecenia platformy Azure interpretuje w Command arguments wierszu danych wyjściowych.

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

Ten drugi przykład jest również poprawny. Użyj polecenia Bash clear , aby usunąć dane wyjściowe konsoli między testami.

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

Te dwa następne przykłady są niepoprawne , ponieważ cudzysłowy i spacje są interpretowane przez powłokę Bash.

Nieprawidłowy format Problem Dane wyjściowe konsoli
az {"key":"value"} --debug Brak pojedynczych cudzysłowów lub znaków ucieczki Argumenty poleceń: ['{key:value}", '--debug']
az {"key": "value"} --debug Brak pojedynczych cudzysłowów lub znaków ucieczki i zawiera dodatkowe miejsce Argumenty poleceń: ['{key:', 'value}', '--debug']

Użyj echo polecenia

Chociaż --debug informuje o dokładnie tym, co interpretuje interfejs wiersza polecenia platformy Azure, drugą opcją jest zwrócenie wartości wyrażenia do konsoli. Ta metoda jest przydatna podczas weryfikowania wyników --query , które zostały szczegółowo omówione w temacie Wypełnianie zmiennych do użycia w skryptach.

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

Rozwiązywanie problemów

Poniżej przedstawiono typowe błędy, gdy składnia polecenia referencyjnego interfejsu wiersza polecenia platformy Azure nie jest poprawnie napisana:

  • "Nieprawidłowe żądanie ... Element {something} jest nieprawidłowy" może być spowodowany spacją, pojedynczym lub podwójnym cudzysłowem albo brakiem cudzysłowu.

  • "Nieoczekiwany token..." jest widoczny, gdy jest dodatkowe miejsce lub cudzysłów.

  • Błąd "Nieprawidłowa wartość jmespath_type" często pochodzi z niepoprawnego cudzysłów w parametrze --query .

  • "Odwołanie do zmiennej jest nieprawidłowe" jest odbierane, gdy ciąg nie jest poprawnie sformatowany z powodu łączenia lub brakującego znaku ucieczki.

  • "Nierozpoznane argumenty" jest często spowodowane nieprawidłowym znakiem kontynuacji wiersza.

  • "Brak wyrażenia po operatorze jednoargumentowym" jest wyświetlany, gdy brakuje znaku kontynuacji wiersza.

Uzyskaj więcej szczegółów

Czy chcesz uzyskać więcej szczegółowych informacji na temat jednego z tematów 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 Cudzysłów powłoki Bash
Cudzysłów programu PowerShell
Cytowanie problemów z programem PowerShell
Porady dotyczące wiersza polecenia systemu Windows
Parametry Używanie cudzysłowów w parametrach interfejsu wiersza polecenia platformy Azure
Znajdź więcej przykładów składni powłoki Bash, programu PowerShell i polecenia cmd w danych wyjściowych polecenia query przy użyciu polecenia JMESPath

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.