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
merge
wartość .
# 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.