I have been trying to write script in Powershell for Azure Automation Aaccount. It should be able to:
This is what I got so far:
# Import the required Azure modules
Import-Module Az.Accounts
Import-Module Az.Storage
Import-Module Az.Resources
# # Authenticate to Azure
# $connectionName = "AzureRunAsConnection"
# $servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
# Connect-AzAccount -ServicePrincipal -Tenant $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
# Variables
$env:AZURE_STORAGE_CONNECTION_STRING = "zzzzzzz"
$resourceGroupName = "vvvvv"
$storageAccountName = "bbbbb"
$subscriptionId = "mmmm"
$resourceGroupName = "nnnn"
$storageAccountName = "iiiii"
$storageAccountKey = "wwwwww"
# Manage identity check
$connectionString = "DefaultEndpointsProtocol=https;AccountName=$storageAccountName;AccountKey=$storageAccountKey;EndpointSuffix=core.windows.net"
# Get the storage account context
$storageAccount = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
# $storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName
$storageContext = $storageAccount.Context
# Get the list of file shares
$fileShares = az storage share list --account-name $storageAccountName --query "[].name" -o tsv
# Loop through each file share and retrieve quota and usage
foreach ($shareName in $fileShares) {
# Get the file share properties using Azure CLI
$shareProperties = az storage share show --name $shareName --account-name $storageAccountName --query "{quota:properties.quota, usage:properties.usage}" -o json | ConvertFrom-Json
$quotaGB = $shareProperties.quota
$usedCapacityBytes = $shareProperties.usage
$usedCapacityGB = [math]::Round($usedCapacityBytes / 1GB, 2)
# Output the results
Write-Output "File Share: $shareName"
Write-Output "Quota (GB): $quotaGB"
Write-Output "Used Capacity (GB): $usedCapacityGB"
Write-Output "-----------------------------"
}
Problem is I cannot get Used capacity to screen. It always says :0.
Over investigation I have found that:
Azure CLI and Azure Storage PowerShell modules do not directly provide used capacity for file shares through a simple API call.
To achieve this, you might need to:
List the files and directories in the file share. Calculate the total size of all files and directories.
Couple of questions:
I have creted this script:
# Import the required Azure modules
Import-Module Az.Accounts
Import-Module Az.Storage
Import-Module Az.Resources
# # Authenticate to Azure
Connect-AzAccount -Identity
# Variables
$env:""
$storageAccountName = ""
$subscriptionId = ""
$storageAccountKey = ""
$resourceGroupName = ""
# Manage identity check
$connectionString = "DefaultEndpointsProtocol=https;AccountName=$storageAccountName;AccountKey=$storageAccountKey;EndpointSuffix=core.windows.net"
# Get the storage account context
$storageAccount = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
$ctx = $storageAccount.Context
# Get the list of file shares
$fileShares = az storage share list --account-name $storageAccountName --query "[].name" -o tsv
# Loop through each file share and retrieve quota and usage
foreach ($shareName in $fileShares) {
$usage = Get-AzRmStorageShare -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -Name $shareName -GetShareUsage
Write-Output $usage
Write-Output "-----------------------------"
# Check if usage data is returned
if ($usage -ne $null) {
# Extract the ShareUsageBytes property (update the property name if necessary)
$usageInBytes = $usage.ShareUsageBytes # Adjust property name as needed
# Convert bytes to gigabytes
$usageInGB = $usageInBytes / 1GB
# Format and output the result
Write-Output "File Share: $shareName"
Write-Output "Usage: $([math]::Round($usageInGB, 2)) GB"
Write-Output "-----------------------------"
} else {
Write-Output "No usage data found for file share: $shareName"
}
}