用于比较 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,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。如果有人能提供一个有用的例子,会有很大帮助。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)