Невозможно получить Blob с помощью PowerShell - PullRequest
0 голосов
/ 05 августа 2020

Я пытался ПОЛУЧИТЬ Blob с помощью приведенного ниже сценария, но он выдает ошибку, выделенную ниже. Я использую сценарий из этой ссылки , а $ signatureString используется в соответствии с this link . В некотором смысле, насколько я понимаю из te chnet, заголовок авторизации должен иметь следующее

Преобразование данных PS в JSON

$ json = $ authHeader | ConvertTo- Json

$method = "GET"
$headerDate = (get-date -format r).ToString()
$headers = @{"x-ms-version"="$headerDate"}
$StorageAccountName = ""
$StorageContainerName = "users"
$StorageAccountKey = ""
$Url = "https://$StorageAccountName.blob.core.windows.net/$StorageContainerName/******/*****.rdp"
$body = "Hello world"
$xmsdate = (get-date -format r).ToString()
$headers.Add("x-ms-date",$xmsdate)
$contentLength = $body.Length
$headers.Add("Content-Length","$contentLength")
$headers.Add("x-ms-blob-type","BlockBlob")
$contentType = "application/json"
#$headers.Add("Content-Type","$contentType")

$signatureString = "$method$([char]10)$([char]10)$([char]10)$contentLength$([char]10)$([char]10)$([char]10)$([char]10)$([char]10)$([char]10)$([char]10)$([char]10)$([char]10)"
#Add CanonicalizedHeaders
$signatureString += "x-ms-blob-type:" + $headers["x-ms-blob-type"] + "$([char]10)"
$signatureString += "x-ms-date:" + $headers["x-ms-date"] + "$([char]10)"
$signatureString += "x-ms-version:" + $headers["x-ms-version"] + "$([char]10)"
#Add CanonicalizedResource
$uri = New-Object System.Uri -ArgumentList $url
$signatureString += "/" + $StorageAccountName + $uri.AbsolutePath + $([char]10) + "restype:container"

$dataToMac = [System.Text.Encoding]::UTF8.GetBytes($signatureString)

$accountKeyBytes = [System.Convert]::FromBase64String($StorageAccountKey)

$hmac = new-object System.Security.Cryptography.HMACSHA256((,$accountKeyBytes))
$signature = [System.Convert]::ToBase64String($hmac.ComputeHash($dataToMac))

$headers.Add("Authorization", "SharedKey " + $StorageAccountName + ":" + $signature);
write-host -fore green $signatureString
write-host -fore green $headers
Invoke-RestMethod -Uri $Url -Method $method -headers $headers

Пожалуйста, помогите мне в этом.

Извините! да, это было не так описательно. вот скриншот

InvalidHeaderValue - неправильный формат

Я на самом деле пытаюсь получить доступ к azure хранилищу BLOB-объектов с помощью powerShell. сегодня я попытался сделать то же самое с другим сценарием, но у меня другая ошибка. См. сценарий и снимок экрана этого сообщения об ошибке ниже.

$storageAccount = ""

$ accesskey = ""

$version = "2017-04-17"
$resource = "tets"
$table_url = "https://$storageAccount.blob.core.windows.net/$resource"
$GMTTime = (Get-Date).ToUniversalTime().toString('R')
$stringToSign = "$GMTTime`n/$storageAccount/$resource"
$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Convert]::FromBase64String($accesskey)
$signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign))
$signature = [Convert]::ToBase64String($signature)
$headers = @{
    'x-ms-date'    = $GMTTime
    Authorization  = "SharedKeyLite " + $storageAccount + ":" + $signature
    "x-ms-version" = $version
    Accept         = "application/json;odata=fullmetadata"
}
$item = Invoke-RestMethod -Method GET -Uri $table_url -Headers $headers -ContentType application/json
return $item.value

Вот сообщение об ошибке, которое я получаю. AuthenticationFailedServer

1 Ответ

0 голосов
/ 05 августа 2020

Рассмотрите возможность использования Azure модулей PowerShell для доступа к большим двоичным объектам, а не к необработанным запросам API. Все детали аутентификации уже должны быть обработаны для вас.

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