Azure CLI'yi PowerShell ortamında çalıştırma konusunda dikkat edilmesi gerekenler
Azure CLI, hem Bash hem de PowerShell ortamında çalışan Azure CLI başvuru komutları aracılığıyla Azure kaynaklarını yönetmek için kullanılan bir araçtır. Ancak, ortamlar arasındaki parametre biçimlendirmesinde beklenmeyen sonuçlara neden olabilecek küçük söz dizimi farklılıkları vardır. Bu makalenin amacı, PowerShell ortamında çalışırken Azure CLI söz dizimi hatalarını çözmenize yardımcı olmaktır.
Bu makalede, aşağıdaki ortamlarda yürütülen Azure CLI komutlarının söz dizimi farklılıkları karşılaştırılır:
- Azure Cloud Shell kullanarak Linux işletim sisteminde çalışan Bash.
- Azure Cloud Shell kullanarak Linux işletim sisteminde çalışan PowerShell .
- PowerShell 5 terminalini kullanarak Windows 11'de çalışan Windows PowerShell.
- PowerShell 7 terminalini kullanarak Windows 11'de çalışan PowerShell.
CLI'yı yeni kullanıyorsanız, bir araçlaortam arasında ayrım yapmak kafa karıştırıcı olabilir. Doğru komut satırı aracını seçme iyi bir karşılaştırma sağlar.
Önkoşullar
Bu makale okumanız ve öğrenmeniz için tasarlanmıştır. Ancak, örnekleri çalıştırmak istiyorsanız, bu makalede kullanılan ortamları yüklemek için sekmeyi seçin Prepare your environments
.
Önemli
Hata oluşturan bir Azure CLI betiğiniz olduğunda, üzerinde çalıştığınız ortamın Azure CLI komut söz dizimini nasıl ayrıştırdığını göz önünde bulundurun.
Azure CLI parametrelerinde alanları geçirme
Azure CLI'da, boşluk içeren bir parametre değeri geçirmeniz gerektiğinde, işletim sistemleri ve ortamlar arasında alıntılama farkları vardır. Bu örnekte az storage account list komutunu kullanın ve çıkış sütunlarını boşluk içeren bir sözcükle yeniden adlandırın.
Bu örnekte, katıştırılmış çift tırnaklı () tek tırnak ('...'
"..."
) sarmalayıcıya dikkat edin.
Bu örnek, Linux'ta PowerShell'de de çalışır.
az storage account list --query '[].{"SA Name":name, "Primary endpoint":primaryEndpoints.blob}' --output table
Filtre eklemek istiyorsanız söz dizimi değişir. Bu örneğin parametre değerini çift tırnak ("..."
) olarak kaydırdığına --query
ve ters eğik çizgi (\
) kaçış karakteri kullandığına dikkat edin. Bu betik PowerShell'de çalışmaz.
az storage account list --query "[?creationTime >='2024-02-01'].{\"SA Name\":name,\"Primary endpoint\":primaryEndpoints.blob}" --output table
Filtre söz dizimini bir PowerShell ortamında çalıştırmayı denediyseniz hata iletisi argument --query: invalid jmespath_type value: "[?creationTime >=..."
aldınız. Ancak Linux ortamındaki Bash'te çıkışınız şuna benzer:
SA Name Primary Endpoint
----------- -----------------
msdocssa00000000 https://msdocssa000000000.blob.core.windows.net/
Sorgu dizesi içeren bir URL'de parametreleri geçirme
URL'lerdeki soru işaretleri, URL'nin sonunu ve sorgu dizesinin başlangıcını gösterir. Azure CLI'yi kullanmayı öğrenme bölümünde 3. adımı açan bir örnek aşağıda verilmişti:
https://learn.microsoft.com/en-us/cli/azure/account?view=azure-cli-2020-09-01-hybrid
.
?view=azure-cli-2020-09-01-hybrid
Azure CLI başvuru içeriğinin istenen sürümündeki sonuçlar.
PowerShell ortamında Azure CLI komutlarını yürütürken PowerShell, soru işaretlerinin değişken adının parçası olmasına izin verir. Bu, Azure CLI parametre değerlerinde karışıklığa neden olabilir.
Azure REST API'sini kullanma makalesinden bir örnek aşağıda verilmiştir:
Bash'te hatasız olarak birlikte nasıl $containerRegistryName?api-version
bir araya getirdiklerine dikkat edin.
# Script for a Bash environment
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
subscriptionId="00000000-0000-0000-0000-000000000000"
resourceGroup="msdocs-app-rg$randomIdentifier"
containerRegistryName="msdocscr$randomIdentifier"
# prior to this GET example, the resource group and container registry were created in the article.
az rest --method get --url https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$containerRegistryName?api-version=2023-01-01-preview
PowerShell özel karakteri içeren parametreleri geçirme
PowerShell'in At (@
) simgesi gibi özel karakterleri vardır. Azure CLI'yi PowerShell'de çalıştırmak için özel karakterin önüne kaçış karakteri ekleyin `
. Ayrıca, değeri tek ('
) veya çift ("
) tırnak içine alabilirsiniz.
Aşağıdaki üç örnek PowerShell'de çalışır:
- parameterName '@parameters.json
- parameterName '@parameters.json'
- parameterName "@parameters.json"
Bu örnek PowerShell'de çalışmaz:
- Parametername @parameters.json
JSON içeren parametreleri geçirme
JSON dizesi gibi karmaşık bağımsız değişkenler için en iyi yöntem, kabuğun yorumunu atlamak üzere bir dosyadan yüklemek için Azure CLI'nin @<file>
kuralını kullanmaktır. At () simgesinin PowerShell'de bir sıçrama işleci olduğunu, dolayısıyla alıntı yapılması gerektiğini@
unutmayın.
az ad app create içinde hem JSON dosya içeriğini hem de komut örneklerini içeren iyi örnekler vardır. İşte bir kod parçacığı:
# Script for a Bash environment
az ad app create --display-name myTestAppName \
--is-fallback-public-client \
--required-resource-accesses @manifest.json
Anahtar:değer çiftlerini içeren parametreleri geçirme
Azure kaynak etiketleri gibi bazı Azure CLI parametre değerleri için anahtar:değer çiftleri gerekir. Veya'nız key
value
boşluk veya özel karakter içeriyorsa Bash ve PowerShell söz dizimi her zaman aynı değildir.
Azure CLI'yı kullanmayı öğrenme öğreticisindeki Farkları alıntılama alıştırması yapmak için etiket oluşturma bölümüne bakın. Bu öğretici adımı aşağıdaki anahtar:değer çifti senaryoları için Bash, PowerShell ve Cmd örnekleri verir:
- Boşluk
- boş değerler
- özel karakterler
- değişkenler
PowerShell'de Azure CLI için hata işleme
Doğru Azure komut satırı aracını seçme bölümünde açıklandığı gibi PowerShell'de Azure CLI komutlarını çalıştırabilirsiniz. Bunu yaparsanız PowerShell'de Azure CLI hata işlemeyi anladığınızdan emin olun. Özellikle Azure CLI, PowerShell'in yakalaması için özel durumlar oluşturmaz.
Alternatif olarak otomatik değişkeni kullanabilirsiniz $?
. Bu değişken en son komutun durumunu içerir. Önceki komut başarısız olursa değeri $?
$False
olur. Daha fazla bilgi için bkz . about_Automatic_Variables.
Aşağıdaki örnekte bu otomatik değişkenin hata işleme için nasıl çalışabileceği gösterilmektedir:
# Script for a PowerShell environment
az group create --name MyResourceGroup
if ($? -eq $false) {
Write-Error "Error creating resource group."
}
Gerekli az
--location
parametre eksik olduğundan komut başarısız oluyor. Koşullu deyim false değerini $?
bulur ve bir hata yazar.
ve catch
anahtar sözcüklerini kullanmak istiyorsanız, bloğun try
yakalaması try
için bir özel durum oluşturmak için kullanabilirsinizthrow
:
# Script for a PowerShell environment
$ErrorActionPreference = "Stop"
try {
az group create --name MyResourceGroup
if ($? -eq $false) {
throw 'Group create failed.'
}
}
catch {
Write-Error "Error creating the resource group."
}
$ErrorActionPreference = "Continue"
Varsayılan olarak, PowerShell yalnızca sonlandırıcı hataları yakalar. Bu örnek, PowerShell'in $ErrorActionPreference
hatayı işleyebilmesi için Stop
genel değişkeni olarak ayarlar.
Koşullu deyim, önceki komutun $?
başarısız olup olmadığını görmek için değişkeni sınar. Öyleyse, throw
anahtar sözcüğü yakalamak için bir özel durum oluşturur. Blok catch
, hata iletisi yazmak veya hatayı işlemek için kullanılabilir.
Örnek, varsayılan değerine geri yüklenir $ErrorActionPreference
.
PowerShell hata işleme hakkında daha fazla bilgi için bkz . Özel durumlar hakkında bilmek istediğiniz her şey.
PowerShell'de Sekme Tamamlamayı Etkinleştir
"Azure CLI tamamlayıcıları" olarak da bilinen sekme tamamlama, ipuçları sağlamak, bulmayı etkinleştirmek ve giriş girişini hızlandırmak için girişler üzerinde tamamlama sağlar. Komut adları, komut grubu adları, parametreler ve belirli parametre değerleri Sekme tuşuna basılarak komut satırına otomatik olarak eklenebilir.
Sekme tamamlama, Azure Cloud Shell'de ve çoğu Linux dağıtımında varsayılan olarak etkindir. Azure CLI sürüm 2.49'dan başlayarak, PowerShell'de Azure CLI için sekme tamamlama özelliğini etkinleştirebilirsiniz. Şu adımları izleyin:
değişkeninde
$PROFILE
depolanan profili oluşturun veya düzenleyin. En basit yol PowerShell'de çalıştırmaktırnotepad $PROFILE
. Daha fazla bilgi için bkz . Profilinizi oluşturma ve Profiller ve yürütme ilkesi.PowerShell profilinize aşağıdaki kodu ekleyin:
Register-ArgumentCompleter -Native -CommandName az -ScriptBlock { param($commandName, $wordToComplete, $cursorPosition) $completion_file = New-TemporaryFile $env:ARGCOMPLETE_USE_TEMPFILES = 1 $env:_ARGCOMPLETE_STDOUT_FILENAME = $completion_file $env:COMP_LINE = $wordToComplete $env:COMP_POINT = $cursorPosition $env:_ARGCOMPLETE = 1 $env:_ARGCOMPLETE_SUPPRESS_SPACE = 0 $env:_ARGCOMPLETE_IFS = "`n" $env:_ARGCOMPLETE_SHELL = 'powershell' az 2>&1 | Out-Null Get-Content $completion_file | Sort-Object | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_) } Remove-Item $completion_file, Env:\_ARGCOMPLETE_STDOUT_FILENAME, Env:\ARGCOMPLETE_USE_TEMPFILES, Env:\COMP_LINE, Env:\COMP_POINT, Env:\_ARGCOMPLETE, Env:\_ARGCOMPLETE_SUPPRESS_SPACE, Env:\_ARGCOMPLETE_IFS, Env:\_ARGCOMPLETE_SHELL }
Menüde kullanılabilir tüm seçenekleri görüntülemek için PowerShell profilinize ekleyin
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
.
Ayrıca bkz.
- Şu makalelerde Bash, PowerShell ve Cmd söz dizimini karşılaştırın:
- Parametrelerde tırnak işaretleri kullanma
- PowerShell ile ilgili sorunları alıntılama hakkında bilgi edinin