我确信这有一个简单的答案。我只是不知道,怎么做。我需要一种从多个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
}
答案 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
#>
干杯!