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

aoyhnmkz  于 2023-11-18  发布在  Shell
关注(0)|答案(4)|浏览(134)

我正在使用Azure CLI 2.0从PowerShell管理存储帐户。我有一个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?

3pmvbmvn

3pmvbmvn1#

尝试将SAS令牌 Package 在第二组引号中:
第一个月
因此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"

ar7v8xwq

ar7v8xwq2#

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

ql3eal8s

ql3eal8s3#

如果您从Azure CLI获取SAS密钥,请注意,如果您使用“-o json”运行它,您将获得SAS密钥值的输出。您可以直接将其分配给变量,它可以由Azure CLI使用而不会出现问题(至少,我可以将其放置在AKV secret中)
这是我写的函数,作为我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)

}

字符串

ctehm74n

ctehm74n4#

对于那些偶然发现同样问题的人,我能够用下面的一行来解决它:

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

字符串
适用于Windows和Linux上的PSCore。

相关问题