使用数组为ssms中的用户列表添加权限

Use an array to add permission to a list of users in ssms

我 运行 几个 class 房间和实验室环境。 classes 之一的学生必须登录界面并连接到我的服务器,然后在 SSMS 中创建他们的帐户。然后我必须进去手动添加他们需要的权限来做他们需要为 class 做的事情。当我的服务器与其他在线服务器“重新同步”时,它们会失去 SSMS 权限。 (我故意含糊其词,不要关注他们为什么会掉烫发。我没有做错任何事)。

我可以创建用户列表并将其保存到数组中。我知道我需要 运行 的 ssms 命令。我要空白的地方是如何将 PS1 放入 SSMS 命令中。我相当确定我需要执行一个 foreach 循环并将其保存到一个 .sql 文件和 运行 那个,但是我的 google 技能让我失望了。任何帮助,将不胜感激!我也是第一次在这个网站上发帖,所以如果看起来很傻,我很抱歉。

$Response = 'y'
$User = $Null
$UserList = @()

#Get a list of users#
Do
{
    $User = Read-Host -Prompt 'Input user name'
    $Response = Read-Host 'Would you like to add any 
additional users? y/n'
    if ($User -ne '') {$UserList += $User}
    }
Until ($Response -eq 'n')

#Loop through the list of users and add to a sql file#
foreach ($User in $UserList) {
    
    }

#The SQL command to add user perms in SQL#
#sqlcmd
#use <db>
#exec sp_addrolemember 'group1','$User'
#exec sp_addrolemember 'group2','$User'
#go

您可以执行类似以下操作来创建 file.sql,您可以使用 Invoke-SqlCmd 或从 TSQL 运行。

$template = { @"
exec sp_addrolemember 'group1','$user'
exec sp_addrolemember 'group2','$user'
"@
}

'use <db>' | Set-Content file.sql
$SqlCommands = foreach ($user in $userlist) {
    & $template
}

$SqlCommands | Add-Content file.sql
'go' | Add-Content file.sql

解释:

使用脚本块({} 周围代码),您可以指定仅在调用脚本块时才计算的变量。您可以使用 & 运算符简单地在子作用域中调用脚本块。

@""@表示here-string.