使用Powershell在多个服务器上运行sqlquery

时间:2012-12-05 09:06:23

标签: sql sql-server powershell

我正在尝试运行此查询

从sys.database_mirroring中选择mirroring_role_desc,其中database_id> 4,mirroring_state为NOT NULL

因此查询将基本输出数据库的数量,只显示主体/镜像 像这样 enter image description here

我希望此查询输出到excel文件另一个有趣的事情,如果实例中的任何一个数据库是prinicial / mirror,那么我们可以假设整个实例为主体/镜像。 所以在excel文件中,我想要一个带有servername \ hostname的列,然后是下一列,以显示它是镜像还是主体或无(如果没有,只留空)如何做到这一点?

我试过了,

$ServerInstance = "server1\instance1a "
$Database = " "
$ConnectionTimeout = 30
$Query = "select mirroring_role_desc from sys.database_mirroring where database_id > 4 and mirroring_state is NOT NULL"
$QueryTimeout = 120

$conn=new-object System.Data.SqlClient.SQLConnection
$ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerInstance,$Database,$ConnectionTimeout
$conn.ConnectionString=$ConnectionString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$cmd.CommandTimeout=$QueryTimeout
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
[void]$da.fill($ds)
$conn.Close()
$ds.Tables

坦率地说,上面的代码工作正常,但问题是获取实例名称,只有带有principal / mirror INTO excel文件的单列,这就是我遇到的问题。

为了更好地了解这是我想要实现的目标: enter image description here

1 个答案:

答案 0 :(得分:0)

我在一段时间后写了一篇博文,在中央管理服务器的所有服务器上运行脚本。你应该能够很容易地适应它。请查看here