2014-10-30 48 views
0

我試圖過濾從SQL Server數據庫獲得的數據集。下面是這種情況...Powershell使用SQL Server數據集

我得到服務器名,從數據庫服務器中的一個,並返回結果集爲return ,$dataSet.Tables[0] DBNAME列。我以表格格式正確獲取結果。

但現在我得到了所有的服務器名從下面這個數據集的變量,

$servers=$dataSet_1.servername | select -unique 

現在,我通過每個服務器試圖循環並獲得與每個服務器上的數據庫列表如下,但看起來這是不是因爲它讓我所有的西弗斯和他們的數據庫名稱的正確的做法是每次迭代

foreach($server IN $servers) 
{ 
    write-host $server 
    $dataSet_1 | Where-Object {$dataSet_1.servername -eq $server} | select $_.dbname 
} 

有人能幫助我正確的做法是一個辦法做到這一點。

示例輸出:(基本上,它應該迭代每個服務器並顯示其數據庫名稱)

服務器A

DBNAME

數據庫1 DATABASE2 數據庫3 ....

服務器B

DBNAME

數據庫1 database8 數據庫研究 ....

服務器C ...

感謝,

+0

請提供輸入採樣數據,預期產出和實際輸出。 – vonPryz 2014-10-30 21:17:45

+0

這裏的輸出應該是什麼樣子, 服務器A DBNAME ------ 數據庫1 DATABASE2 數據庫3 服務器B DBNAME ------ 數據庫1 database5 數據庫研究 服務器C .... – sqlcheckpoint 2014-10-30 21:22:57

+0

請不要作爲註釋添加數據。這很難閱讀。編輯你的問題,並添加*所有*問的數據。當執行你的代碼時,我得到了以下異常: – vonPryz 2014-10-30 21:26:54

回答

0

「$ dataSet_1 |其中{$ _。服務器名-eq $服務器}「仍返回System.Data.DataTable類型。

這是否返回所需的輸出?

$dataSet_1 | where {$_.servername -eq $server} | %{$_.dbname} 
0

也許這:

$servers=$dataSet_1.servername | Select-Object -Unique 
$filteredSet = $dataSet_1 | Where-Object { $servers -contains $_.servername } 

$filteredSet 
+0

。 'Select-Object:Property「servername」找不到。 在線:54 char:38 + $ servers = $ dataSet_1.servername | Select-Object -Unique -ExpandProperty serve ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ + CategoryInfo:InvalidArgument :(SERVER-A:PSObject)[Select-Object],PSArgumentException + FullyQualifiedErrorId:ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand' – sqlcheckpoint 2014-10-30 21:44:38

+0

但以下代碼收集來自數據集 '$ servers = $ dataSet_1.servername | select -unique' 從這裏開始如何緩存服務器名稱以獲取$ servers中每個服務器的關聯dbname。 – sqlcheckpoint 2014-10-30 21:47:12

+0

我編輯了代碼;它現在工作嗎?請注意,很難說出你的'$ dataSet_1'對象包含什麼,所以我要通過上下文線索去解釋。 – briantist 2014-10-30 22:03:51