我正在将Azure部署脚本从AzureRM迁移到Az,看来新模块无法打开文件。
有什么想法吗?
我尝试用反斜杠替换反斜杠; 我什至从脚本所在的文件夹中调用它,因此不需要传递完整的文件名,它可以将其正确解析为全名,但是仍然无法打开它。
PS C:\dev\pq\service\scripts\azure\NestedTemplates> Set-AzStorageBlobContent -Container "florin-container" -Context $storageAccount.Context -File ApplicationInsights.json
Set-AzStorageBlobContent : Failed to open file C:\dev\pq\service\scripts\azure\NestedTemplates\ApplicationInsights.json: Illegal characters in path..
At line:1 char:1
+ Set-AzStorageBlobContent -Container "florin-container" -Context $stor ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Set-AzStorageBlobContent], TransferException
+ FullyQualifiedErrorId : TransferException,Microsoft.WindowsAzure.Commands.Storage.Blob.SetAzureBlobContentCommand
2/13/19更新:
我在更大的脚本套件之外创建了一个非常简单的测试用例场景,可以非常轻松地重现该问题。我在文件c:\中放置了一个名为test.json的文件,它包含一个空的json对象,只是花括号,如下面的输出所示。我正在使用AzureRM Alias方案:
PS C:\> type test.json
{}
PS C:\> type C:\test.json
{}
PS C:\> Enable-AzureRmAlias
PS C:\> $sa = Get-AzureRmStorageAccount -ResourceGroupName florin-rg -Name florinsa
PS C:\> Set-AzureStorageBlobContent -Container florin-container -Context $sa.Context -File test.json -Blob test
Set-AzureStorageBlobContent : Failed to open file C:\test.json: Illegal characters in path..
At line:1 char:1
+ Set-AzureStorageBlobContent -Container florin-container -Context $sa. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Set-AzStorageBlobContent], TransferException
+ FullyQualifiedErrorId : TransferException,Microsoft.WindowsAzure.Commands.Storage.Blob.SetAzureBlobContentCommand
PS C:\>
答案 0 :(得分:1)
如果您的AzureRM
命令可以正常工作,则首先只执行Enable-AzureRmAlias
来执行通过AzureRM
模块运行Az
命令的最简单方法,然后运行{{1 }}命令,它也将起作用。
此外,我在本地测试了AzureRM
命令,它应该可以正常工作。
Az
这些是我的powershell模块,您可以检查它们。
答案 1 :(得分:1)
在阅读了https://github.com/Azure/azure-powershell/issues/8473的讨论(上面的注释之后)并点击了指向https://blogs.msdn.microsoft.com/jeremykuhne/2016/06/09/new-net-path-handling-sneak-peek/的链接之后,我能够在机器上解决问题。
第二个链接文档说“将具有以下内容的文件powershell.exe.config
拖放到C:\Windows\System32\WindowsPowerShell\v1.0
中”。我碰巧已经有了文件,所以将内容添加到了现有文件中。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>
</configuration>
重启PowerShell之后,我现在能够成功执行脚本。我更新到Az
模块并删除了AzureRm
模块后,问题开始了。希望这可以节省其他人追踪链接的时间。
答案 2 :(得分:0)
以上所有解决方案都不适合我。克服它的唯一方法是使用Azure.Storage模块而不是Az.Storage,并使用Set-AzureStorageBlobContent代替Set-AzStorageBlobContent
所以:
1)Install-Module Azure.Storage -AllowClobber
(在没有-AllowClobber的情况下,由于Azure.Profile而失败)
2)Import-Module Azure.Storage
3)在脚本中,将Set-AzStorageBlobContent
命令替换为Set-AzureStorageBlobContent