Flo*_*tor 2 powershell azure 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
Run Code Online (Sandbox Code Playgroud)
2/13/19 更新:
我创建了一个非常简单的测试用例场景,在我们更大的脚本套件之外,可以很容易地重现问题。我在 c:\ 中放置了一个名为 test.json 的文件,它包含一个空的 json 对象,只有花括号,如下面的输出所示。我正在使用 AzureRM 别名方案:
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:\>
Run Code Online (Sandbox Code Playgroud)
在阅读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>
Run Code Online (Sandbox Code Playgroud)
重新启动 PowerShell 后,我现在能够成功执行我的脚本。在我更新到Az模块并删除AzureRm模块后,问题开始了。这有望节省其他人追逐链接的时间。
更新 0
也可以修改注册表来解决问题。
$registryPath = "HKLM:\SOFTWARE\Microsoft\.NETFramework\AppContext"
New-Item -Path $registryPath
New-ItemProperty -Path $registryPath -Name "Switch.System.IO.UseLegacyPathHandling" -Value "false"
Run Code Online (Sandbox Code Playgroud)
然后重新启动 PowerShell 实例。
| 归档时间: |
|
| 查看次数: |
1966 次 |
| 最近记录: |