2017-03-15 62 views
0

我正在尋找使用Where-Object cmdlet過濾數據集。例如,請考慮以下cmdlet中的Notifications列。它包含兩個值,我想通過Where-Object | {$_.Notifications -eq 'Operator1'}進行過濾。我也嘗試過使用-in, -notin, -contains, -notcontains, -match, -notmatch, -like, -notlike等進行過濾。但是迄今爲止這些都沒有取得任何結果。任何指針是高度讚賞。使用Where-Object cmdlet過濾數據集

PS>Get-DbaAgentAlert -SqlInstance 'Redacted' 

ComputerName   : Redacted 
SqlInstance   : Redacted 
************   : ************ 
************   : ************ 
Notifications   : {Operator1, Operator2} 
************   : ************ 
************   : ************ 

做一個Get-Member回報

PS>Get-DbaAgentAlert -SqlInstance 'Redacted' | Get-Member 

    TypeName: System.Management.Automation.PSCustomObject 

Name     MemberType Definition 
----     ---------- ---------- 
OtherColumns   ********** *********** 
Notifications   NoteProperty DataTable Notifications= 

而且,Notifications列,實際的數據集看起來像

PS>$alerts.Notifications | Select -First 2 | Format-Table 

OperatorId OperatorName  UseEmail UsePager UseNetSend HasEmail HasPager HasNetSend 
---------- ------------  -------- -------- ---------- -------- -------- ---------- 
     1 Operator1   True False  False  True False  False 
     2 Operator2   True False  False  True False  False 

謝謝!

編輯:我使用的是這裏的cmdlet的來源爲dbatools/Get-DbaAgentAlert

+0

你試過的正確元素'-contains'?通知看起來像一個數組。 – gvee

+0

是的,我做過了(在問題中提到)。但是,它沒有返回任何結果。我應該把我在這裏使用的命令的來源。它來自這個模塊 - [dbatools](https://dbatools.io/) – walt

+0

我不清楚你想要過濾的結果的哪一部分。該cmdlet返回一些警報,每個警報都包含一些通知,其中每行包含多個值。如果您嘗試將字符串與DataRow(Notifications DataTable中的單個條目)進行比較,當然會失敗。你需要考慮DataTable柱(如你的例子中的「OperatorName」) – TToni

回答

0

試試這個:

Get-DbaAgentAlert -SqlInstance ".\sql2016" | 
Where-Object {$_.Notifications.OperatorName -eq "test1"} 

以下是我的工作說出來:

$results = Get-DbaAgentAlert -SqlInstance ".\sql2016" 
$res.Notifications 

這將返回例如:

OperatorId : 1 
OperatorName : test1 
UseEmail  : True 
UsePager  : False 
UseNetSend : False 
HasEmail  : False 
HasPager  : False 
HasNetSend : False 

OperatorId : 2 
OperatorName : test2 
UseEmail  : True 
UsePager  : False 
UseNetSend : False 
HasEmail  : False 
HasPager  : False 
HasNetSend : False 

...的Notifications財產基本上是另一個對象,所以我們的目標是對象

+1

我應該更加關注。非常感謝。這工作! – walt