如何在PowerShell中为Azure CLI提供SAS令牌

时间:2017-11-13 23:35:12

标签: powershell azure-cli

我正在使用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?

2 个答案:

答案 0 :(得分:3)

尝试将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"

答案 1 :(得分:0)

如果要从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)

}