首页 > 解决方案 > 用于比较 SQL 登录的 Powershell 脚本

问题描述

我有一个存储在 SQL 表中的 SQL Server 列表,其中一些位于 AG 中。我想比较主副本和辅助副本之间的 SQL 登录。我只想了解AG副本的SQL登录的SID或密码是否有差异。我正在寻找将输出存储在具有以下格式的数组/哈希表中:

AGPrimaryReplica 登录名 SID 密码 AGSecondaryReplica 登录名 SID 密码

我尝试使用下面的链接作为参考来构建脚本,但没有让它工作。

https://davegugg.wordpress.com/2018/06/23/comparing-sql-server-logins-on-mirror-servers/

这是我尝试过的。它不会出错,但不会以我需要的格式返回正确的信息。不知道我哪里出错了。

$MirrorSQLLoginList = Invoke-SQLCmd -query "select name, sid, is_disabled, password_hash from sys.sql_logins
where name not like '%##%' and name <> 'sa'
order by name;" -Server "Server1" 
$PrincipalSQLLoginList = Invoke-SQLCmd -query "select name, sid, is_disabled, password_hash from sys.sql_logins
where name not like '%##%' and name <> 'sa'
order by name;" -Server "Server2" 
$DifferentLogins = $PrincipalSQLLoginList | Where { $MirrorSQLLoginList.name -NotContains $_.name -and $MirrorSQLLoginList.sid -notlike $_.sid -or $MirrorSQLLoginList.password_hash -notlike $_.password_hash }

另一个挑战是从表本身获取 AG 副本详细信息。为了测试,我只是使用静态服务器名称。但实际上,存在多个副本和 AG。如果有人可以提供一个很有帮助的工作示例。

如果您需要更多详细信息,请告诉我。谢谢!

标签: sql-serverpowershellscripting

解决方案


推荐阅读