Get-AzDataLakeStoreItem возвращает ошибку GETFILESTATUS с неизвестной ошибкой для допустимых элементов - PullRequest
0 голосов
/ 06 января 2019

Я пишу сценарий powershell для настройки новой учетной записи хранилища озера данных Gen1 и создания папок с обновленными списками ACL. Оператор New-AzDataLakeStoreAccount работает нормально; Сбой New-AzDataLakeStoreItem и Get-AzDataLakeStoreItem с похожей неизвестной ошибкой.

Следующий код powershell создаст новое хранилище озера данных. У меня есть группа ресурсов и группа безопасности в подписке, как указано ниже. Второй и третий скрипты для распечатки и добавления папки не удаются. Я использую 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 попыток. [Произошла ошибка при получении токена доступа к управляемой службе для ресурса 'https://datalake.azure.net' с использованием URI' http://localhost:50342/oauth2/token?resource=https%3A%2F%2Fdatalake.azure.net&api-version=2018-02-01'. Убедитесь, что эта управляемая служба настроена на отправку токенов по этому адресу и что связанная управляемая служба У удостоверения есть соответствующее назначение роли и попробуйте снова войти в систему. Длина токена равна 6. Токен, скорее всего, поврежден., Длина токена равна 6. Токен, скорее всего, поврежден., Длина токена равна 6. Токен, скорее всего, поврежден. Длина 6. Жетон, скорее всего, поврежден.] [ServerRequestId:] В строке: 1 символ: 1 + Get-AzDataLakeStoreItem -Account "adedeveastus2" -Path "/" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~ + CategoryInfo: CloseError: (:) [Get-AzDataLakeStoreItem], AdlsException + FullyQualifiedErrorId: Microsoft.Azure.Commands.DataLakeStore.GetAzureDataLakeStoreItem

Ошибка, возвращаемая при использовании хоста Windows Powershell, носит более информативный характер.

Операция: сбой GETFILESTATUS с неизвестной ошибкой: заголовок «Пользователь-агент» необходимо изменить, используя соответствующее свойство или метод.

Я бы ожидал получить объект DataLakeStoreItem и такие вещи, как Name и Path. Я думаю, что общая ошибка для других пользователей ADL или оболочки Shell PowerShell?

1 Ответ

0 голосов
/ 07 января 2019

Я могу воспроизвести вашу проблему в Azure Cloud Shell, когда я запускаю команду локально (PSVersion is 5.1.17134.228), я получаю ту же ошибку с GitHub известной проблемой .

Как сказала команда datalake, см. ссылку :

Это проблема класса Httpwebrequest, используемого нашим SDK. Настройка useragent для httpwebrequest различна для разных сетевых структур и netcore:

NET Framework: webReq.UserAgent = client.GetUserAgent()

Чистый стандарт: webReq.Headers["User-Agent"] = client.GetUserAgent()

Если вы попытаетесь позже сделать что-то в сетевом фреймворке, вы получите сообщение об ошибке выше.

Когда вы используете этот модуль z, который использует netstandard dll нашего SDK. Когда вы используете это из windows powershell, он пытается использовать стандартную библиотеку dll на netframework, которая выдает эту ошибку.

И Раствор :

Я проверял это в net core powershell. Работает нормально. Мы переходим от httpwebrequest к httpclient, что, вероятно, решит проблему.

Так что, в основном, если вы используете Windows PowerShell, используйте Azurerm или используйте Az от PowerShell Netcore.

Кажется, это объясняет ошибку The 'User-Agent' header must be modified using the appropriate property or method, поэтому вы можете попробовать использовать Az powershell в Powershell core . Если это приемлемо, вы также можете использовать AzureRM модуль powershell в windows powershell, он отлично работает на моей стороне.

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...