Мне нужно записать полный URI большого двоичного объекта хранилища Azure - с токеном SAS - из переменной в файл и прочитать его при последующем запуске сценария (на другой стороне перезагрузка). Поскольку URI-токены SAS содержат по крайней мере один амперсанд, переменная, выводимая в файл, усекается на первом;
$sasTokenURI | out-file "c:\sasTokenURI.txt"
Записывает URI до первого амперсанда и исключая его.
Как я могу заставить Powershell дословно выводить URI в файл, а затем дословно читать его позже?
Я не уверен, что я правильно понимаю, если в моем ответе что-то не так, укажите мне. Следующий шаг подойдет мне, может, вы могли бы проверить.
$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
Я тестирую в своей лаборатории, у меня работает.
Похоже, URI не был отключен сценарием установки, он был отключен при передаче сценарию установки через шаблон. Амперсанды в Powershell зарезервированы для загадочного будущего использования.
Я прекратил это делать (для тех, у кого такая же проблема), используя .replace ("&", "@") повсюду и только отменив замену до того, как я вызвал веб-запрос. Теперь все работает нормально.