【发布时间】:2021-11-06 07:42:22
【问题描述】:
我找不到如何通过 PowerShell 覆盖 Azure SQL Server 中现有数据库的方法。
Microsoft 或遇到此问题的人是否提供了任何选项,如何一次又一次地覆盖数据库...
这是我的代码如何复制它,但没有覆盖数据库的选项...任何帮助将不胜感激。
[String]$tenantId = '' these are filled removed only here
[String]$accountId= ''
[String]$subscriptionId = ''
[String]$databaseServereInstance = ''
[String]$sourceDatabaseName = ''
[String]$azureRg = ''
[String]$sourceServer = ''
Write-Information -MessageData '*** Obtain token and connect to Azure AD ***'
#Obtain the Access Token
[Microsoft.Azure.Commands.Profile.Models.PSAccessToken]$accessToken = Get-AzAccessToken -ResourceUrl 'https://graph.windows.net/'
[String]$dbAaccessToken = (Get-AzAccessToken -ResourceUrl 'https://database.windows.net/').Token
Write-Output $dbAaccessToken
#Connect to AzureAD
Connect-AzureAD -AadAccessToken $accessToken.Token -TenantId $tenantId -AccountId $accountId
#Get-AzureADGroup
[String]$groupname = 'test' these are filled removed only
[Microsoft.Open.AzureAD.Model.Group]$getGroup = Get-AzureADGroup | Where { $PSItem.DisplayName -eq $groupname }
Write-Output $getGroup.DisplayName
if($getGroup -ne $null)
{
#Get-AzureADGroupMember
Get-AzureADGroupMember -ObjectId $getGroup.ObjectId | ForEach-Object -Process `
{
[String]$userPrincipalName = $PSItem.UserPrincipalName
[String]$givenName = $PSItem.GivenName
[String]$getDbAzSqlAaccessToken = (Get-AzAccessToken -ResourceUrl 'https://database.windows.net/').Token
if([String]::IsNullOrEmpty($PSItem.GivenName))
{
#Copy source database for each user in a group and make the user db_owner
New-AzSqlDatabaseCopy -ResourceGroupName $azureRg -ServerName $sourceServer -DatabaseName $sourceDatabaseName `
-CopyResourceGroupName $azureRg -CopyServerName $sourceServer -CopyDatabaseName "$($sourceDatabaseName)-DevDB-$($userPrincipalName)"
[String]$query = "
-- Add contained Azure AD user
CREATE USER [$($userPrincipalName)] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA = dbo;
-- Add user to role(s) in db
ALTER ROLE db_owner ADD MEMBER [$($userPrincipalName)];
"
Invoke-Sqlcmd -ServerInstance $databaseServereInstance -Database "$($sourceDatabaseName)-DevDB-$($userPrincipalName)" -AccessToken $getDbAzSqlAaccessToken ` -query $query
}
else
{
#Copy source database for each user in a group and make the user db_owner
New-AzSqlDatabaseCopy -ResourceGroupName $azureRg -ServerName $sourceServer -DatabaseName $sourceDatabaseName `
-CopyResourceGroupName $azureRg -CopyServerName $sourceServer -CopyDatabaseName "$($sourceDatabaseName)-DevDB-$($givenName)"
[String]$query = "
-- Add contained Azure AD user
CREATE USER [$($givenName)] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA = dbo;
-- Add user to role(s) in db
ALTER ROLE db_owner ADD MEMBER [$($givenName)];
"
Invoke-Sqlcmd -ServerInstance $databaseServereInstance -Database "$($sourceDatabaseName)-DevDB-$($givenName)" -AccessToken $getDbAzSqlAaccessToken ` -query $query
}
}
}
else
{
Write-Verbose -Message "AzureAD Group could not be found..."
}
【问题讨论】:
-
如果您只想创建一个具有相同 DevDB 名称的新副本,那么您可能应该在复制之前只使用
Remove-AzSqlDatabase。
标签: c# powershell azure-powershell pester