将 Azure SAS 令牌 URI 保存到 Powershell 中的文件

将 Azure SAS 令牌 URI 保存到 Powershell 中的文件

我需要将 Azure 存储 blob 的完整 URI(带有 SAS 令牌)从变量写入文件,并在后续运行脚本时(在重新启动的另一侧)将其读出。由于 SAS 令牌 URI 至少包含一个 & 符号,因此输出到文件中的变量在第一个 & 符号处被截断;

$sasTokenURI | out-file "c:\sasTokenURI.txt"

写入 URI 直到第一个 & 符号(不包括)。

我如何强制 Powershell 将 URI 逐字输出到文件,然后稍后逐字读取?

答案1

我不确定我的理解是否正确,如果我的答案有误,请指出。以下步骤对我有用,也许你可以检查一下。

$StorageAccountName = "shuilinuxdiag336"
$StorageAccountContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -eq $StorageAccountName}).Context
$StorageContainerName = "customscriptfiles"

$StartTime = Get-Date
$EndTime = (Get-Date).AddHours(4)
$blobName = "install_nginx_ubuntu.sh"
$SASURI = New-AzureStorageBlobSASToken -Container $StorageContainerName `
    -Blob $blobName `
    -Context $StorageAccountContext `
    -Permission "rwd" `
    -StartTime $StartTime `
    -ExpiryTime $EndTime `
    -FullUri

$SASURI | out-file "C:\Users\v-shshui\test.txt"

$sasTokenURI = cat "C:\Users\v-shshui\test.txt"

Invoke-WebRequest -Uri $sasTokenURI -OutFile $blobName

我在我的实验室中测试,它对我有用。

在此处输入图片描述

答案2

看起来 URI 并没有被安装脚本截断,而是在通过模板传递给安装脚本时被截断了。Powershell 中的 & 符号被保留用于某些神秘的未来用途。

我通过始终使用 .replace("&","@") 并仅在调用 Web 请求之前反转替换来阻止它(对于遇到同样问题的人)。现在它工作正常。

相关内容