Get-AzDataLakeStoreItem返回GETFILESTATUS失败,并显示有效项目的未知错误

时间:2019-01-06 20:20:41

标签: azure powershell

我正在编写一个Powershell脚本来设置一个新的Data Lake store gen1帐户,并使用更新的ACL创建文件夹。 New-AzDataLakeStoreAccount语句工作正常; New-AzDataLakeStoreItem和Get-AzDataLakeStoreItem失败,并出现类似的未知错误。

下面的powershell代码将创建一个新的Data Lake存储。订阅中有一个资源组和安全组,如下所示。用于列出和添加文件夹的第二个和第三个脚本失败。我正在使用https://shell.azure.com来执行Powershell。

New-AzDataLakeStoreAccount -ResourceGroupName "ade-dev-eastus2" -Name "adedeveastus2" -Location "East US 2" -DefaultGroup (Get-AzADGroup -DisplayName "Technical Operations").Id -Encryption ServiceManaged -Tag @{User="ADE";}-Tier Consumption

Get-AzDataLakeStoreItem -AccountName "adedeveastus2" -Path "/"

New-AzDataLakeStoreItem -AccountName "adedeveastus2" -Path "/Staging" -Folder

以下是Get-AzDataLakeStoreItem的错误消息

  

Get-AzDataLakeStoreItem:获取路径/的元数据时出错。   操作:GETFILESTATUS失败,发生未知错误:令牌长度为6。令牌很可能格式错误。资料来源:StackTrace :。   5次尝试后引发的最后一次遇到的异常。 [使用URI'https://datalake.azure.net'检索资源'http://localhost:50342/oauth2/token?resource=https%3A%2F%2Fdatalake.azure.net&api-version=2018-02-01'的托管服务访问令牌时出错。请检查此托管服务是否已配置为在此地址发射令牌,并且关联的托管服务标识是否具有适当的角色分配,然后尝试重新登录。令牌长度为6。令牌很可能格式错误。令牌长度为6。令牌很可能格式错误。令牌长度为6。令牌很可能格式错误。令牌长度为6。令牌很可能格式错误。]   [ServerRequestId:]   在第1行:char:1   + Get-AzDataLakeStoreItem-帐户“ adedeveastus2”-路径“ /”   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~   + CategoryInfo:CloseError :( :) [Get-AzDataLakeStoreItem],AdlsException   + FullyQualifiedErrorId:Microsoft.Azure.Commands.DataLakeStore.GetAzureDataLakeStoreItem

使用Windows Powershell主机时返回的错误更具描述性。

  

操作:GETFILESTATUS失败,出现未知错误:必须使用适当的属性或方法修改'User-Agent'标头。

我希望重新获得一个DataLakeStoreItem对象,以及诸如Name和Path之类的东西。我认为对于ADL或Cloud Shell Powershell的其他用户来说普遍存在错误吗?

1 个答案:

答案 0 :(得分:0)

我可以在Azure Cloud Shell中重现您的问题,当我在本地(PSVersion is 5.1.17134.228)中运行命令时,GitHub known issue也遇到相同的错误。

如数据湖小组所说,请参见以下link

  

这是我们的SDK使用的Httpwebrequest类的问题。在netframework和netcore中,为httpwebrequest设置useragent的方法有所不同:

     

.NET框架:webReq.UserAgent = client.GetUserAgent()

     

网络标准:webReq.Headers["User-Agent"] = client.GetUserAgent()

     

如果您尝试在.net框架中进行后续操作,则会遇到上面的错误。

     

当您使用此z模块时,该模块正在使用我们SDK的netstandard dll。当您从Windows Powershell中使用它时,它会尝试在netframework上使用net standard dll,从而导致此错误。

解决方案

  

我在网络核心Powershell中对此进行了测试。运行正常。   我们正在从httpwebrequest转移到httpclient,这可能会解决该问题。

     

因此,基本上,如果您使用的是Windows powershell,请使用azurerm,否则请使用powershell netcore中的Az。

似乎可以解释错误The 'User-Agent' header must be modified using the appropriate property or method,因此您可以尝试在Powershell core中使用Az Powershell。如果可以接受,您也可以在Windows powershell中使用AzureRM powershell模块,它对我而言效果很好。

Get-AzureRmDataLakeStoreItem -Account "joydatalake2" -Path "/"
New-AzureRmDataLakeStoreItem -Account "joydatalake2" -Path "/Staging" -Folder

enter image description here