我正在编写一个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的其他用户来说普遍存在错误吗?
答案 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