【问题标题】:How to provide a SAS token to Azure CLI within PowerShell如何在 PowerShell 中向 Azure CLI 提供 SAS 令牌
【发布时间】:2017-11-13 23:35:11
【问题描述】:

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


    【解决方案1】:

    尝试将 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 令牌存储在变量中呢?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我今天早上遇到了问题,当 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-31
        • 2017-08-24
        • 2017-05-20
        • 1970-01-01
        • 2019-10-06
        • 2020-08-07
        • 2017-08-08
        • 2019-01-14
        相关资源
        最近更新 更多