Azure CLI 命令可以在 Bash、 PowerShell 和 Windows 命令殼層 (cmd) 腳本語言中執行。 不過,有細微的腳本差異。 在本教學課程步驟中,瞭解如何針對這三種腳本語言建立第一個 Azure 儲存體 帳戶和格式參數值。
先決條件
- 您已完成準備環境的必要前置條件。
- 您具有資源群組層級的
contributor或更高許可權,因而可存取資源群組。
請留意行繼續字符的使用
大部分的 Azure CLI 檔都是使用 Azure Cloud Shell 在 Bash 中撰寫和測試。 複製 Azure CLI 語法時要記住的第一件事是驗證所選腳本語言的行接續字元,因為它們無法互換。
| 指令碼語言 | 行接續字元 |
|---|---|
| Bash | 反斜線 (\) |
| PowerShell | 反引號 (`) |
| Cmd | 插入號(^) |
小提示
Azure CLI 程式代碼區塊右上角的 [複製] 按鈕會依設計移除反斜杠 (\) 和反引號 (`)。 若要複製格式化的程式代碼區塊,請使用鍵盤或滑鼠來選取並複製範例。
瞭解使用變數時的語法差異
使用變數的語法在腳本語言之間會稍有不同。 以下是比較:
| 用例 | Bash | PowerShell | Cmd |
|---|---|---|---|
| 建立變數 | variableName=varValue | $variableName=“varValue” | 將 variableName 設定為 varValue |
| 使用變數作為參數值 | variableName 變數名稱 | $variableName | %variableName% |
在參數中使用 --query 變數 |
'$variableName' | '$variableName' | '$variableName' |
有數種不同的方式可將變數資訊傳回控制台畫面,但 echo 大部分情況下都適用。 以下是比較:
- Bash:回應$varResourceGroup
- PowerShell:echo $varResourceGroup
- Cmd:echo %varResourceGroup%
在步驟 3 中, 填入用於腳本的變數,您可以深入探討變數語法的範例。
瞭解腳本語言之間的引用差異
每個 Azure CLI 參數都是字串。 不過,每個腳本語言都有自己的規則來處理單引號和雙引號、空格和參數值。
| 字串值 | Azure CLI | PowerShell | Cmd |
|---|---|---|---|
| 文字 | 「text」 或 ‘text’ | 「text」 或 ‘text’ | 文字 |
| 數目 | \'50\' | ''50'' | '50' |
| 布林值 | \'true\' | ''false'' | 真 |
| 日期 | 2021年11月15日 | 2021年11月15日 | 2021年11月15日 |
| JSON | '{“key”:“value”}' 或 “{”key“:”value“}” | '{“key”: “value”}' 或 “{'”key'“: '”value'“}” 或 “{”“key”“: ”“value”}” | {"key":"value"} |
許多 Azure CLI 參數都接受以空格分隔的值清單。 此格式會影響引用的過程。
- 無引號的空白分隔清單:--parameterName firstValue secondValue
- 引號空格分隔清單:--parameterName "firstValue" "secondValue"
- 包含空格的值:--parameterName “value1a value1b” “value2a value2b” “value3”
如果您不確定文本語言如何評估字串,請將字串的值傳回控制台,或使用 --debug ,如偵錯 Azure CLI 參考命令中所述。
建立記憶體帳戶以套用您學到的內容
本教學課程步驟的其餘部分將說明如何在 Azure CLI 命令中使用引述規則,以及如何使用在準備 Azure CLI 的環境中創建的資源群組。 以您的資源群組名稱取代 <msdocs-tutorial-rg-00000000> 。
建立要在本教學課程中使用的 Azure 記憶體帳戶。 此範例會將隨機標識碼指派給記憶體帳戶名稱。 不過,如果您想要使用不同的名稱,請參閱記憶體帳戶名稱規則的 記憶體帳戶概觀 。
這很重要
您必須先在訂用帳戶中註冊 Microsoft.Storage 資源提供者,才能建立儲存體帳戶。 若要瞭解如何註冊資源類型,請參閱 註冊資源提供者。
下一個文稿範例示範下列專案的腳本特定語言語法:
- 線條接續
- 變數使用方式
- 隨機標識碼
-
echo命令
# 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
備註
您是否收到「找不到訂用帳戶」錯誤? 在Microsoft.Storage未在啟用的訂閱中註冊時,會發生此錯誤。 若要註冊資源提供者,請參閱 Azure 資源提供者和類型。
建立新的記憶體帳戶時,Azure CLI 會傳回超過 100 行 JSON 作為輸出。 下列 JSON 字典輸出會省略字段,以求簡潔。
{
"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"
}
建立標籤以練習引用差異
使用 az storage account update,新增標籤以協助您識別記憶體帳戶並瞭解引用差異。 這些文稿範例示範下列專案的腳本特定語言語法:
- 包含空格的值
- 引用空格
- 跳脫特殊字元
- 使用變數
參數 --tags 會接受索引鍵:值組以空格分隔的清單。 以您的資源群組名稱取代 ,並以<msdocs-tutorial-rg-00000000>您的 Azure 記憶體帳戶名稱取代 <msdocssa00000000> 。
# 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"
如果您不想在完成本教學課程步驟時覆寫先前的標籤,請使用 az tag update 命令將 參數設定 --operation 為 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
比較更多特定於腳本語言的腳本
深入了解這些腳本差異。 這些範例展示以下引號使用的差異:
- 傳遞 JSON 字串做為參數值
- 使用
--query參數篩選結果- 數字
- 布林值
- 日期
包含 JSON 字串的參數範例。 此腳本會提供以供日後參考,因為我們在本教學課程中並未使用 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}}}'
數值篩選的範例。 除非您目前訂用帳戶中有 VM,否則會提供此範例以供日後參考。
az vm list --resource-group <myResourceGroup> \
--query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
--output table
使用本教學課程中建立的儲存帳戶來篩選布爾值的範例。
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
--query "[?allowBlobPublicAccess == \`true\`].id"
使用本教學課程中建立的記憶體帳戶來篩選日期的範例。
# 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}"
對 Azure CLI 參考命令進行偵錯
使用偵錯參數
Azure CLI 提供 --debug 參數,可與任何命令搭配使用。 偵錯輸出很廣泛,但可提供您包括下列資訊:
- 由文稿語言解譯的命令自變數 (參數值)
- 記錄檔的位置
- API 呼叫詳細數據
- 執行錯誤
如果您在使用 Azure CLI 命令時遇到難以理解和更正的執行錯誤,查看 --debug 可以讓您了解 Azure CLI 正在執行的步驟。
以下是建立記憶體帳戶時偵錯輸出的一部分:
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
...
如需更多疑難解答秘訣,請參閱 針對 Azure CLI 進行疑難解答。
使用 echo 命令
雖然 --debug 確切地告訴您 Azure CLI 正在解譯的內容,但第二個選項是將表達式的值傳回控制台。 當驗證--query的結果時,這個方法會很有幫助,這在填入變數以便在腳本中使用中詳細說明。
strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}
故障排除
當 Azure CLI 參考命令語法未正確撰寫時,常見的錯誤如下:
- 「不正確的請求...{某項內容} 無效」可能是因為空格、單引號、雙引號,或缺少引號而導致。
- 「未預期的令牌...」當額外空間或引號時, 就會看到 。
- 「無效 jmespath_type 值」錯誤通常是因為
--query參數中的引號使用不正確所引起。 - 當字串格式不正確時,通常會因為串連或遺漏逸出字元而收到「變數參考無效」。
- 「無法辨識的自變數」通常是由不正確的行接續字元所造成。
- 遺漏行接續字元時,就會看到「一元運算符之後的遺漏表達式」。
如需更多疑難解答秘訣,請參閱 針對 Azure CLI 命令進行疑難解答。
取得更多詳細數據
您要針對本教學課程步驟中涵蓋的其中一個主題提供更多詳細數據嗎? 使用此表格中的連結來深入瞭解。
| 主旨 | 瞭解更多資訊 |
|---|---|
| 腳本差異 | 腳本語言之間的引用差異 |
| Bash 引用規則 | |
| PowerShell 引用規則 | |
| 使用 PowerShell 腳本語言執行 Azure CLI 的考慮 | |
| Windows 命令行秘訣 | |
| 參數 | 在 Azure CLI 參數中使用引號 |
| 使用 JMESPath 在查詢命令輸出中尋找 Bash、PowerShell 和 Cmd 的更多語法範例 | |
| 故障排除 | 針對 Azure CLI 命令進行疑難解答 |
後續步驟
既然您已瞭解如何撰寫適用於Bash、PowerShell和 Cmd 的 Azure CLI 語法,請繼續進行下一個步驟,瞭解如何將值擷取至變數。