2018-08-22

PowerShell to get Some DATA on ALL your Azure SQL DB's

שלום רב

למי שיש הרבה בסיסי נתונים מפוזרים בענן רוצה לצבור עליהם מידע לצרכים שונים יכול ליצור סקריפט PowerShell שיעבור על כל ה Subscriptions ויאסוף מידע שקיים ב PowerShell.

וכן המקום לפינת הקיטור היומית - ידידינו ממיקרוסופט מה עם Backward Compatability?
היו לי פרמטרים שיכלנו לשאוב למשל כמה גודל בסיס הנתונים וכרגע אי אפשר לדעתי. נכון נותנים את המידע במקומות אחרים אבל נוח שזה יעבוד שנים - וסקריפט שעבד לי שנים - לאחרונה הפסיק לעבוד.

יש לזה המון שימושים למשל רוצים לראות באילו בסיסי נתונים יש המלצות למשל להוסיף אינדקס ואתה לא רוצה לעבור בפורטל לכל בסיס נתונים. או מתי הגיבוי הראשון או הגיבוי האחרון שיש.

אז הנה סקריפט בסיסי ממש - מוזמנים לשפר ולשתף עם הקהילה.

  1. ראשית עליכם לוודא שהמודולים של Azure מותקנים אצלכם (הרצה חד פעמית במחשב)
install-module -Name AzureRM -Force
  1. עושים לוגאין ליוזר שלכם ב Azure (חד פעמית בסשין)
Add-AzureRmAccount
  1. מריצים את הסקריפט להנאתכם
Write-Host "Login to Azure..." -ForegroundColor Cyan
$subscription = ( Get-AzureRmSubscription)
$subscriptionId = ( $subscription).SubscriptionId
$subscriptionName = ( $subscription).Name
foreach ($s in $subscription)
 
{



$c = Set-AzureRmContext -Subscriptionid $s.SubscriptionId
$a = Select-AzureRmSubscription -SubscriptionId $s.SubscriptionId
$ResourceGroup = @(Get-AzureRmResourceGroup)
foreach ($RG in $ResourceGroup)

{


$Sds = @(Get-AzureRmSqlServer -ResourceGroupName $RG.ResourceGroupName)
foreach ($SqlDatabaseServer in $Sds)

{


$databases = @(Get-AzureRmSqlDatabase -ResourceGroupName $RG.ResourceGroupName -ServerName $SqlDatabaseServer.ServerName | Where-Object {$_.DatabaseName -ne "master" })
foreach ($SqlDatabase in $databases)

{


Write-Host -Separator " " $s.Name $SqlDatabase.ServerName $SqlDatabase.DatabaseName $SqlDatabase.Location $SqlDatabase.CurrentServiceObjectiveName MAX:($SqlDatabase.MaxSizeBytes/1024/1024/1024)GB }



}

}

}
 

כמו שרואים מביא רשימה של כל מיני נתונים כמו מיקום בסיס הנתונים ועוד.