Senior Systems Engineer
Senior Systems Engineer

Reputation: 1139

Get Blob URL from Azure Get-AzStorageContainer where Public Access is set to On?

I need to get the URL for all of my Blob in all Storage accounts and all Resource groups.

The command below can be used, but I need to iterate through all objects in all of my current subscription.

# Set variables.
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$containerName = "<container>"

# Get context object.
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context

# Read the container's public access setting.
Get-AzStorageContainerAcl -Context $ctx

Script parameters removed like below:

# Get context object.
$storageAccount = Get-AzStorageAccount
$ctx = $storageAccount.Context

# Read the container's public access setting.
Get-AzStorageContainerAcl -Context $ctx

However, the error is:

Get-AzStorageContainer : Cannot convert 'System.Object[]' to the type 'Microsoft.Azure.Commands.Common.Authentication.Abstractions.IStorageContext' required by parameter 'Context'. Specified method is not supported.
At line:6 char:36
+ Get-AzStorageContainerAcl -Context $ctx
+                                    ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-AzStorageContainer], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageContainerCommand

PS C:\WINDOWS\system32\WindowsPowerShell\v1.0>  $ctx[0].GetType().FullName
Microsoft.WindowsAzure.Commands.Common.Storage.LazyAzureStorageContext

The suggested method by Kryzstof:

$storageAccount = Get-AzStorageAccount
$ctxs = $storageAccount.Context

&{
     foreach ($ctx in $ctxs) {
        $acl = Get-AzStorageContainerAcl -Context $ctx
        Write-Host $acl
     }
} | ogv

is showing some strange result like below:

Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.Resourc eModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Co mmands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.Resourc eModel.AzureStorageContainer

Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.Resourc eModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Co mmands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContai ner Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.Resourc eModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Co mmands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContai ner Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.Res ourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzur e.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageCo ntainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage .ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.Windows Azure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStora geContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Sto rage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageContainer

Upvotes: 0

Views: 792

Answers (1)

Krzysztof Madej
Krzysztof Madej

Reputation: 40603

You have array and you can't pass it at once. You'll have to call it for each available context:

# Get context object.
$storageAccount = Get-AzStorageAccount #-ResourceGroupName $rgName -Name $accountName
$ctxs = $storageAccount.Context

 foreach ($ctx in $ctxs) {
    # Read the container's public access setting.
    $acl = Get-AzStorageContainerAcl -Context $ctx

    Write-Host $acl

 }

Please try use just '$acl | Out-GridView' (instead of Write-Host $acl) and you should get:

enter image description here

If you want to get just URI you can get it from here Write-Host $acl.Context.BlobEndPoint however if this is not exactly what you want please call $acl| ConvertTo-JSON and find property you are looking for.

Upvotes: 2

Related Questions