gpt4 book ai didi

azure - 通过 Powershell 读取 Azure Blob

转载 作者:行者123 更新时间:2023-12-03 02:09:11 27 4
gpt4 key购买 nike

Azure Blob 存储中存储了一些文件。我想在最新文件中搜索一个字符串,并稍后通过 Powershell 使用该字符串。问题是 - 我无法直接读取或搜索字符串,我必须先通过 Get-AzStorageBlobContent 下载它。我想避免下载文件。我想直接搜索一个字符串。

$storageAccountName = "resaibdplogsa2prod"
$container_name = "devops-tasks"
$context = New-AzStorageContext -StorageAccountName $storageAccountName -UseConnectedAccount
$blobs = Get-AzStorageBlob -Container $container_name -Context $context | sort @{Expression = "LastModified";Descending=$true}
$latestBlob = $blobs[0]
$getString_terraform = Select-String -Path $latestBlob -Pattern '_tool/terraform.*'

最后一行给了我一个明显的错误' 找不到路径 'C:\Users\jubaiaral\Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageBlob',因为它不存在。 '

最佳答案

我不确定使用 Az PowerShell 模块是否可以实现您想要实现的目标。

根据@guiwhatsthat关于使用Select-String的注释,您可以使用REST API。从技术上讲,它还下载 blob(但不存储在文件中) - 这是一个示例。

身份验证部分

这使用基于 applicationId/secret 的身份验证。相应的服务主体至少需要分配Storage Blob Data Reader角色。

$requestMethod  = 'POST'
$requestHeaders = @{
'Content-Type' = 'application/x-www-form-urlencoded'
}
$requestUri = 'https://login.microsoftonline.com/'+$tenantId+'/oauth2/v2.0/token'
$requestBody = @{
client_id = $applicationId
grant_type = 'client_credentials'
client_secret = $applicationSecret
scope = $storageAccountBlobEndpoint+'.default'
}

$request = Invoke-RestMethod -Method $requestMethod `
-Headers $requestHeaders `
-Uri $requestUri `
-Body $requestBody

读取 Blob 并搜索字符串

$blobRequestMethod  = 'GET'
$blobRequestHeaders = @{
'Content-Type' = 'application/xml'
Authorization = $($request.token_type + ' ' + $request.access_token)
'x-ms-date' = $(Get-Date -AsUTC -Format 'ddd, dd MMM yyyy HH:mm:ss') + ' GMT'
'x-ms-version' = '2021-04-10'
}
$blobRequestUri = $storageAccountBlobEndpoint + $containerName + '/' + $blobName

$blobRequest = Invoke-RestMethod -Method $blobRequestMethod -Headers $blobRequestHeaders -Uri $blobRequestUri

$blobRequest | Select-String -Pattern $searchString

显然,在运行之前您需要填充一些变量(下面的值是随机示例):

$tenantId                   = "597d8458-6a5d-447f-875d-922e448f681a"
$subscriptionId = "3338781b-426a-4b1c-8545-d9b88d78039d"
$storageAccountBlobEndpoint = "https://<some_name>.blob.core.windows.net/"
$applicationId = "4e625cb8-595b-4b46-9ba9-6a9d220f4208"
$applicationSecret = "<some_secret_value>"
$containerName = "container01"
$blobName = "yourblob.txt"
$searchString = "find this"

我知道它不是没有下载数据,但至少它没有写文件。 :-)

引用:https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob

关于azure - 通过 Powershell 读取 Azure Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73887937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com