[英]Collecting data from multiple SQL Servers
我敢肯定有一個簡單的答案。 我只是不知道該怎么做。 我需要一種從多個SQL Server收集數據的方法。 我正在使用以下代碼來獲取數據。 (不是真正的代碼)。
該代碼獲取一組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
}
像這樣的事情應該做你想要的:
$servers = 'srv1','srv2','srv3','srv4','srv5'
$sql = "select @@version"
$res = foreach($i in $servers) {
Invoke-Sqlcmd -ServerInstance $i -Query $sql -ConnectionTimeout 60 -QueryTimeout 99999
}
為什么不使用數組?
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
}
看來您已經找到答案了。 如果要避免使用Invoke-Sqlcmd,這是另一個選擇。
Invoke-Sqlcmd2是Chad Miller的舊功能,Chad Miller是SQL的Microsoft 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
#>
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.