Set-AzStorageBlobContent引发异常:路径中的非法字符

时间:2019-02-04 19:06:35

标签: azure powershell azure-storage

我正在将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:\>

3 个答案:

答案 0 :(得分:1)

如果您的AzureRM命令可以正常工作,则首先只执行Enable-AzureRmAlias来执行通过AzureRM模块运行Az命令的最简单方法,然后运行{{1 }}命令,它也将起作用。

此外,我在本地测试了AzureRM命令,它应该可以正常工作。

Az

enter image description here

这些是我的powershell模块,您可以检查它们。

enter image description here

答案 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