Я работаю над сценарием PowerShell, который проверяет указанный SQL Server, чтобы увидеть, успешно ли определенному имени входа (назовем его «ContractUser») роль SysAdmin.Я ищу способ написать простой if, а затем проверить, имеет ли этот логин роль SysAdmin.
Я нашел много примеров в Интернете, которые показывают, как получить весь список логинов SysAdmin, ноЕще не выяснили, как изменить эти скрипты, чтобы проверять сервер только на один логин.Например, следующий скрипт получает все логины с ролью SysAdmin, а затем делает что-то особенное для них.
$SQLSvr = "SQLServername\Instancename";
$MySQL = New-Object Microsoft.SqlServer.Management.Smo.Server $SQLSvr;
$SQLLogins = $MySQL.Logins;
$SysAdmins = $null;
$SysAdmins = foreach ($SQLUser in $SQLLogins) {
foreach ($role in $SQLUser.ListMembers()) {
if ($role -match 'sysadmin') {
...do stuff...
};
};
};
Я попытался немного изменить это и придумал следующий код, который не возвращает результаты какожидается (я знаю, что сервер, который я проверяю, имеет этот логин и тот логин в системном администраторе, но сценарий говорит иначе):
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
$serverConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$serverConnection.ServerInstance=$SQLServer
$server = New-Object Microsoft.SqlServer.Management.SMO.Server($serverConnection)
$SQLLogins = $server.Logins
$loginIsSysadmin = "No"
foreach ($SQLLogin in $SQLLogins) {
$SQLRoles = $SQLLogin.ListMembers()
if ($SQLRoles -eq "SysAdmin" -and $SQLLogin.name -eq "ContractUser") {
$loginIsSysadmin = "Yes"
break
}
}
Я ожидаю, что мой скрипт изменит переменную $loginIsSysadmin
на "Да », который я мог бы затем сделать простую проверку для вывода и дальнейших действий.Тем не менее, эта переменная остается «Нет» после запуска скрипта.
Любой вклад в то, что я делаю неправильно, будет высоко оценен.