Udostępnij za pośrednictwem


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ć zarówno w językach skryptów powłoki Bash, programu PowerShell, jak i powłoki poleceń systemu 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 języków skryptów.

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 kwestii, które należy zapamiętać podczas kopiowania składni interfejsu wiersza polecenia platformy Azure jest sprawdzenie znaków kontynuacji wiersza dla wybranego języka skryptowego, ponieważ nie są one wymienne.

język skryptów 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 językami skryptowymi. 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 nazwa_zmiennej $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 językami skryptów

Każdy parametr interfejsu wiersza polecenia platformy Azure jest ciągiem. 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 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"}" lub "{'"key": '"value'"}" lub "{""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 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.

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.

Ważne

Aby można było utworzyć konto magazynu, Microsoft.Storage dostawca zasobów musi być zarejestrowany w ramach subskrypcji. Aby dowiedzieć się więcej na temat rejestrowania typów zasobów, zobacz Rejestrowanie dostawcy zasobów.

W tym następnym przykładzie skryptu pokazano składnię specyficzną dla języka skryptów 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

Uwaga

Czy po prostu wystąpił 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 zasobów i typy platformy Azure.

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 języka skryptów 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 --operation mergewartość .

# 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 języka

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ą one następujące informacje:

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

Jeśli podczas pracy z poleceniami interfejsu wiersza polecenia platformy Azure występują trudności z zrozumieniem i poprawianiem błędu wykonywania, --debug odpowiadasz na kroki wykonywane przez interfejs wiersza polecenia platformy Azure.

Poniżej przedstawiono niewielką część danych wyjściowych debugowania podczas tworzenia konta magazynu:

 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 porad dotyczących rozwiązywania problemów, zobacz Rozwiązywanie problemów z interfejsem wiersza polecenia platformy Azure.

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.

Aby uzyskać dodatkowe porady dotyczące 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ół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 Cytowanie różnic między językami skryptowymi
Reguły cytowania powłoki Bash
Reguły cytowania programu PowerShell
Zagadnienia dotyczące uruchamiania interfejsu wiersza polecenia platformy Azure w języku skryptowym programu 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
Rozwiązywanie problemów Rozwiązywanie problemów z poleceniami interfejsu wiersza polecenia platformy Azure

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.