SQL ServerでPowerShellを実行し、SQL ServerのSysadmin一覧を取得したいです。
方針としては、PowerShellでSQLに接続し、SELECTクエリを叩こうと思いますが、他に手段があるのならご教示いただきたいです。
要件は、PowerShell、またはコマンドプロンプトからSQL DBのSysadmin一覧を取得することです。
SSMS上で以下のクエリを実行すると、管理者一覧がとれるので、これをPowerShellで実行しようとしました。
SQLクエリ
1SELECT roles.principal_id AS RolePrincipalID 2 , roles.name AS RolePrincipalName 3 , server_role_members.member_principal_id AS MemberPrincipalID 4 , members.name AS MemberPrincipalName 5FROM sys.server_role_members AS server_role_members 6INNER JOIN sys.server_principals AS roles 7 ON server_role_members.role_principal_id = roles.principal_id 8INNER JOIN sys.server_principals AS members 9 ON server_role_members.member_principal_id = members.principal_id 10;
以下のコードを記載しました。
# ①Windows認証でSQL接続情報の設定 [object]$connectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder [object]$connectionString['Data Source'] = "インスタンス名" # ホスト\インスタンスを指定 [object]$connectionString['Initial Catalog'] = "データベース名" # データベースを指定 [object]$connectionString['Integrated Security'] = "TRUE" # Windows統合認証の利用 # SQLConnection作成 [object]$sqlConnection = New-Object System.Data.SQLClient.SQLConnection($connectionString) # データベースへ接続 [object]$sqlConnection.Open() # クエリ作成 [string]$insertQuery = "SELECT roles.principal_id AS RolePrincipalID , roles.name AS RolePrincipalName , server_role_members.member_principal_id AS MemberPrincipalID , members.name AS MemberPrincipalName FROM sys.server_role_members AS server_role_members INNER JOIN sys.server_principals AS roles ON server_role_members.role_principal_id = roles.principal_id INNER JOIN sys.server_principals AS members ON server_role_members.member_principal_id = members.principal_id ;" # SQLCommandを設定 [object]$sqlCommand = New-Object System.Data.SQLClient.SQLCommand($insertQuery, $sqlConnection) # 実行 $result = $sqlCommand.ExecuteNonQuery()
結果として、エラーは出ておりません。ただ、Resultの結果が-1となっております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/08 01:37