Как узнать, что файл существует в файловом ресурсе Azure без подключения с помощью powershell

Я пытался найти файл в общей папке Azure. Я знаю, как получить файл, подключив общий файловый ресурс Azure к компьютеру программным путем. Есть ли другой способ, кроме монтирования файлового ресурса? Обнаружена функция REST API общего доступа к файлам Azure, которую мы можем использовать для этого. Но как использовать REST API с помощью PowerShell

Когда я попытался использовать приведенную ниже команду, я получаю сообщение об ошибке, как указано.

   Invoke-RestMethod -Method Get -Uri "https://test.file.core.windows.net/testartifacts/testdb/version?restype=share&comp=metadata"

   Invoke-RestMethod: InvalidQueryParameterValueValue for one of the query parameters specified in 
  the request URI is
  invalid.

И как авторизовать этот запрос?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
1 620
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ниже указаны способы получения файла из файлового ресурса Azure.

1. Используйте Azure CLI. Смотрите здесь.

az login #Log in interactively

az storage file download \
    --account-name $storageAccountName \
    --account-key $storageAccountKey \
    --share-name $shareName \
    --path "myDirectory/SampleUpload.txt" \
    --dest "SampleDownload.txt" \
    --output none

Если вы хотите войти в систему, используя субъект-службу. Сначала необходимо создать субъект-службу. См. ниже документ, чтобы создать субъект-службу.

Используйте портал для создания приложения Azure AD и субъекта-службы.

Создайте субъект-службу Azure с помощью Azure CLI

И вам нужно добавить разрешение на чтение для субъекта-службы в назначении роли вашей учетной записи Azure Story.

Затем вы можете войти в систему, используя субъект-службу:

az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID

az storage file download --account-name ...

2. Используйте Azure powershell: см. здесь.

Connect-AzAccount  #Log in interactively

$ctx=(Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccName).Context  
     
$file=Get-AZStorageFile -Context $ctx -ShareName $fileShareName -Directory directiry -Path filepath

Вы также можете войти, используя субъект-службу.

$pscredential = New-Object -TypeName System.Management.Automation.PSCredential($sp.ApplicationId, $sp.Secret)
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

3. Использование Azure Rest API. Смотрите здесь.

Вы можете проверить приведенный ниже пример для аутентификации остального вызова API:

# Variables
$TenantId = "" # Enter Tenant Id.
$ClientId = "" # Enter Service Principal Client Id.
$ClientSecret = "" # Enter Service Principal Client Secret.
$Resource = "https://management.core.windows.net/"
$SubscriptionId = "" # Enter Subscription Id.

$RequestAccessTokenUri = "https://login.microsoftonline.com/$TenantId/oauth2/token"

$body = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret&resource=$Resource"

$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $body -ContentType 'application/x-www-form-urlencoded'

Write-Host "Print Token" -ForegroundColor Green
Write-Output $Token

# Get file
$fileUrl = "https://myaccount.file.core.windows.net/myshare/mydirectorypath/myfile"

$Headers = @{}

$Headers.Add("Authorization","$($Token.token_type) "+ " " + "$($Token.access_token)")

$file= Invoke-RestMethod -Method Get -Uri $fileUrl -Headers $Headers

Write-Host "Print File" -ForegroundColor Green
Write-Output $file

Подробный пример смотрите здесь.

Если вы хотите проверить, существует ли файл в общей папке Azure, вы можете использовать Azure File Rest API Получить свойства файла . Что касается того, как выполнить аутентификацию для вызова API, мы можем использовать авторизацию с общим ключом. Для получения более подробной информации, пожалуйста, обратитесь к здесь

Например

$accesskey = "<storage account key>"
$storageAccount = "andyprivate"
$shareName = "share2"
$filePath = "test1.xml"
$date =  (Get-Date).ToUniversalTime().AddYears(1).toString('R')
$version = "2020-04-08"

$stringToSign = "HEAD`n`n`n`n`n`n`n`n`n`n`n`nx-ms-date:$date`nx-ms-version:$version`n/$storageAccount/$shareName/$filePath"
 
$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"=$date;
           "x-ms-version"= $version;
           "Authorization"= "SharedKey $($storageAccount):$signature"}

$url = "https://$storageAccount.file.core.windows.net/$shareName/$filePath"

try{

 $res=Invoke-WebRequest -Uri $url -Method Head -Headers $headers -UseBasicParsing
 
}catch{

  if ($_.Exception.Response.StatusCode.value__ -eq 404){
   write-host "The file does not exist" -ForegroundColor Red
  }
 
}


Другие вопросы по теме