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

问题描述 投票:0回答:4

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

powershell azure-cli
4个回答
8
投票

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


2
投票

我今天早上遇到了这个问题,并解决了当 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 开发博客


1
投票

如果您从 Azure CLI 获取 SAS 密钥,请注意,如果您使用“-o json”运行它,您将获得带引号的 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)

}

0
投票

对于那些偶然发现同样问题的人,我可以使用以下行修复它:

$sasTokenEscaped = $IsWindows ? "`"$sasToken`"" : $sasToken

适用于 Windows 和 Linux 上的 PSCore。

© www.soinside.com 2019 - 2024. All rights reserved.