从多个SQL Server收集数据

时间:2014-11-30 18:35:13

标签: sql-server powershell

我确信这有一个简单的答案。我只是不知道,怎么做。我需要一种从多个sql服务器收集数据的方法。我正在使用以下代码来获取数据。 (不是真正的代码)。

代码获取一组SQL Server的VERSION信息。我需要一种方法来收集数组或某种集合中的这些信息。

随后,在FOREACH块之后,一旦我将数据放在一个地方,我就会对它进行处理。谢谢。

$servers = 'srv1','srv2','srv3','srv4','srv5'

foreach($i in $servers) {

$sql = "select @@version"

#I need a way to collect the below result set in a variable  cummulatively
#if i just use some variable $res, data gets overwritten in every iteration 

Invoke-Sqlcmd -ServerInstance $i  -query $sql   -ConnectionTimeout 60 -QueryTimeout 99999

}

3 个答案:

答案 0 :(得分:1)

这样的事情应该做你想做的事情:

$servers = 'srv1','srv2','srv3','srv4','srv5'

$sql = "select @@version"
$res = foreach($i in $servers) {
  Invoke-Sqlcmd -ServerInstance $i -Query $sql -ConnectionTimeout 60 -QueryTimeout 99999
}

答案 1 :(得分:1)

为什么不使用数组?

Invoke-SQLcmd的结果将是可以添加到数组的对象。像这样:

$servers = 'srv1','srv2','srv3','srv4','srv5'

$result = @()
foreach($i in $servers) {

$sql = "select @@version"

#I need a way to collect the below result set in a variable  cummulatively
#if i just use some variable $res, data gets overwritten in every iteration 

$result += Invoke-Sqlcmd -ServerInstance $i  -query $sql   -ConnectionTimeout 60 -QueryTimeout 99999

}

答案 2 :(得分:0)

看起来你已经找到了答案。如果你想避免使用Invoke-Sqlcmd,这是另一个选择。

Invoke-Sqlcmd2是Chad Miller的旧功能,前微软的SQL MVP和其他一些贡献者。一些好处包括简化的参数化查询,管道输入,不依赖SQLPS等等。

#Dot source Invoke-Sqlcmd2
. "\\path\to\Invoke-Sqlcmd2.ps1"

#Example query using pipeline input.
#Append server instance adds the instance as a column.
$Servers |
    Invoke-Sqlcmd2 -Query "select @@version as Version" -AppendServerInstance 

<#
    Version                                                       ServerInstance                                                                                      
    -------                                                       --------------                                                                                      
    Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) ...   ServerInstance1                                                                                             
    Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) ...   ServerInstance2                                                                                             
    Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64) ...       ServerInstance3                                                                                            
    Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64) ...       ServerInstance4     
#>

干杯!