簡體   English   中英

如何在 PowerShell 內向 Azure CLI 提供 SAS 令牌

[英]How to provide a SAS token to Azure CLI within PowerShell

我正在使用來自 PowerShell 的 Azure CLI 2.0 來管理存儲帳戶。 我有一個 SAS 令牌(我存儲在一個變量中),我想在命令中使用它。 這是我正在運行的腳本:

$sasToken = 'st=2017-11-13T10%3A55%3A06Z&se=2017-11-13T11%3A27%3A06Z&sp=w&spr=https&sv=2017-04-17&sr=c&sig=%2BA6LDTwHes6JdxEAHXSvbYc70y30OcznjMVSyFbCXog%3D'

az storage blob upload `
    --account-name mystorageaccount `
    --container-name mycontainer `
    --file c:\temp\file.txt `
    --name file.txt `
    --sas-token $sasToken

當我運行它時,出現此錯誤:

The specified resource does not exist.
'se' is not recognized as an internal or external command,
operable program or batch file.
'sp' is not recognized as an internal or external command,
operable program or batch file.
'spr' is not recognized as an internal or external command,
operable program or batch file.
'sv' is not recognized as an internal or external command,
operable program or batch file.
'sr' is not recognized as an internal or external command,
operable program or batch file.
'sig' is not recognized as an internal or external command,
operable program or batch file.

在我看來,PowerShell 每次看到一個符號時都會截斷 SAS 令牌,而 Azure CLI 不會將其作為同一字符串的所有部分。

有沒有辦法強制 PowerShell 完全按原樣使用 SAS 令牌調用 Azure CLI?

嘗試將SAS令牌包裝在第二組引號中:

$sasToken = '"st=2017-11-13T10%3A55%3A06Z&se=2017-11-13T11%3A27%3A06Z&sp=w&spr=https&sv=2017-04-17&sr=c&sig=%2BA6LDTwHes6JdxEAHXSvbYc70y30OcznjMVSyFbCXog%3D"'

因此,CLI命令如下所示:

--sas-token "st=2017-11-13T10%3A55%3A06Z&se=2017-11-13T11%3A27%3A06Z&sp=w&spr=https&sv=2017-04-17&sr=c&sig=%2BA6LDTwHes6JdxEAHXSvbYc70y30OcznjMVSyFbCXog%3D"

今天早上我遇到了這個問題,當 SAS Uri 存儲在一個變量中時,我解決了這個問題:

$sasUri = "`"$pkgSasUri`"" 
....
az deployment group create `
  --resource-group $rg `
  --name create_deployment_cses `
  --template-file .\template.json `
  --parameters .\parameters.json configurationSasUri=$confSasUri packageSasUri=$pkgSasUri

基於Microsoft devblogs

如果要從Azure CLI獲取SAS密鑰,請注意,如果使用“ -o json”運行SAS密鑰,則將得到引號中的SAS密鑰的值作為輸出。 您可以直接將其分配給變量,並且可以被azure CLI使用,而不會出現問題(至少,我可以將其放在AKV機密中)

這是我為獲取該變量作為ps1代碼的一部分而編寫的函數:

function Get-SASToken {
    param (
        # Storage Account 
        [Parameter(Mandatory=$true)][alias("a")][string]$StorageAccount,
        # Storage Container name
        [Parameter(Mandatory=$true)][alias("c")][string]$StorageContainer,
        # Parameter help description
        [Parameter(Mandatory=$true)][alias("p")][string]$SAPolicy
    )
    echo (az storage container generate-sas --account-name $StorageAccount -n $StorageContainer --policy-name $SAPolicy -o json)

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM