【发布时间】:2021-01-08 23:52:25
【问题描述】:
我有这个脚本,我可以用它来创建登录名并将 sysadmin 分配给支持组。 它并不完美,但它确实有效。
但是问题是我没有收到运行它的任何反馈。我需要稍后检查登录是否已成功创建,这违背了它的目的。
是否有任何简单的方法可以从 sql 打印消息是否操作成功? csv 文件如下所示:
名称,环境
server1,prd
server2,qas
$servers = Import-Csv 'C:\Users\me\Desktop\servers.csv'
foreach ($server in $servers) {
$seperate = $server.name.split('\')
$serverName = $seperate[0]
$instanceName = $seperate[1]
$eServAccount = 'domain\srv-'+$serverName+''
$eServAccountLogin = '[domain\srv-'+$serverName+']'
if($server.env -eq 'PRD') {
$suppGrp = 'domain\DBA PRD'
}
elseif($server.env -eq 'QAS') {
$suppGrp = 'domain\DBA QAS'
}
elseif($server.env -eq 'DEV') {
$suppGrp = 'domain\DBA DEV'
}
$suppGrpLogin = '['+$suppGrp+']'
$queryString = "
IF NOT EXISTS (SELECT loginname FROM master.dbo.syslogins
WHERE name = '$eServAccount')
BEGIN
CREATE LOGIN $eServAccountLogin FROM WINDOWS WITH DEFAULT_DATABASE=[master]
End
IF EXISTS (SELECT loginname FROM master.dbo.syslogins
WHERE name = '$eServAccount') AND
(SELECT IS_SRVROLEMEMBER ( 'sysadmin', '$eServAccount')) = 0
BEGIN
ALTER SERVER ROLE [sysadmin] ADD MEMBER $eServAccountLogin
END
IF NOT EXISTS (SELECT loginname FROM master.dbo.syslogins
WHERE name = '$suppGrp')
BEGIN
CREATE LOGIN $suppGrpLogin FROM WINDOWS WITH DEFAULT_DATABASE=[master]
End
IF EXISTS (SELECT loginname FROM master.dbo.syslogins
WHERE name = '$suppGrp') AND
(SELECT IS_SRVROLEMEMBER ( 'sysadmin', '$suppGrp')) = 0
BEGIN
ALTER SERVER ROLE [sysadmin] ADD MEMBER $suppGrpLogin
END
"
Invoke-Sqlcmd -ServerInstance $server.name -Database master -Query $queryString
}
【问题讨论】:
标签: sql sql-server powershell sqlcmd