使用Where-Object cmdlet过滤数据集

时间:2017-03-15 21:11:32

标签: sql-server powershell dbatools

我希望使用Where-Object cmdlet过滤数据集。例如,请考虑以下cmdlet中的Notifications列。它包含两个值,我想按Where-Object | {$_.Notifications -eq 'Operator1'}过滤它。我还尝试使用-in, -notin, -contains, -notcontains, -match, -notmatch, -like, -notlike等进行过滤。但到目前为止,这些都没有产生任何结果。任何指针都非常感谢。

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

1 个答案:

答案 0 :(得分:0)

试试这个:

$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}}属性基本上是另一个对象,所以我们必须定位的正确元素对象