Get-AzureStorageBlob возвращает ноль - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь получить большой двоичный объект из Azure:

$name = "myfolder/20180223_064819[1].jpg"
$blob = Get-AzureStorageBlob -Container $container.Name -Context $context -Blob $name -ErrorAction Stop 
$blob -eq $null # is True

, и файл присутствует в хранилище, в указанном выше месте, я вижу его с помощью обозревателя хранилища Azure.Однако $ blob имеет значение $ null, а не выдает ошибку, что обычно происходит, когда файл не найден.Я получаю доступ к другим файлам нормально.

Если я создаю другой файл myfile / 201802230648191.jpg.В этом коде $ blob2 возвращает объект (это то, что вы ожидаете)

$name = "myfolder/201802230648191.jpg"
$blob2 = Get-AzureStorageBlob -Container $container.Name -Context $context -Blob $name -ErrorAction Stop 
$blob2 -eq $null # is False

Я пробовал URL-адрес, экранирующий имя, но затем выдает не найденное исключение.Я рассмотрел здесь правила именования: https://docs.microsoft.com/en-us/rest/api/storageservices/Naming-and-Referencing-Containers--Blobs--and-Metadata, но, похоже, не нарушает их.

Итак, мой вопрос: почему $ blob возвращает нуль вместо объекта?

А также, Как я могу получить большие двоичные объекты с именем, содержащим [или]?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

У меня есть ответ на этот вопрос: https://github.com/Azure/azure-powershell/issues/7848#issuecomment-439307333

Как правило, согласен с Джорджем, использование -prefix должно работать, так как -prefix не поддерживает поиск по шаблону.В любом случае, это также приведет к тому, что другой BLOB-объект будет начинаться с имени BLOB-объекта, например test/new11_22[1].jpgab, чтобы получить только совпадающий BLOB-объект, вы можете отфильтровать BLOB-объекты с помощью конвейера, например:

PS C:\WINDOWS\system32>> Get-AzureStorageBlob -Container $containerName -Context $ctx -prefix test/new11_22[1].jpg | ? {$_.Name -eq "test/new11_22[1].jpg"}


   Container Uri: https://***.blob.core.windows.net/***

Name                 BlobType  Length          ContentType                    LastModified         AccessTier SnapshotTime         IsDeleted 
----                 --------  ------          -----------                    ------------         ---------- ------------         --------- 
test/new11_22[1].jpg BlockBlob 2097152         application/octet-stream       2018-11-16 07:29:19Z                                 False 

На самом деле, польза от Get-AzureStorageBlob выровнен с другими командлетами Powershell, такими как Get-Item: как для файла c:\temp\new11_22[1].jpg, следующий результат.

PS C:\WINDOWS\system32> get-item c:\temp\new11_22[1].jpg

PS C:\WINDOWS\system32> get-item c:\temp\new11_22?1?.jpg


    Directory: C:\temp


Mode                LastWriteTime         Length Name                                                                                                                                                                                                                                                       
----                -------------         ------ ----                                                                                                                                                                                                                                                       
-a----       10/19/2018   7:27 PM        2097152 new11_22[1].jpg 
0 голосов
/ 16 ноября 2018

Я протестировал ваш код и получил тот же результат , что и вы.Затем я проверил Get-AzureStorageBlob doc и обнаружил, что он поддерживает поиск по шаблону , даже поддержка Accept wildcard characters равна false .

ЗатемДалее я проверил код.Я изменил имя картинки на Snipaste_2018-11-02_13-56-321.png без [] и все еще использую код, все заработало. Здесь - результат.Таким образом, проблема в том, что [] в $name был распознан как символы подстановки.

Поэтому, если вы все еще настаиваете на своем имени, вы можете использовать -Prefix вместо -Blob, Здесь - мой результат.

Если у вас остались вопросы, пожалуйста, дайте мне знать.

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