0

我正在寻找使用Where-Objectcmdlet 过滤数据集。例如,考虑Notifications以下 cmdlet 中的列。它包含两个值,我想用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

4

1 回答 1

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属性基本上是另一个对象,因此我们必须针对该对象的正确元素

于 2017-03-15T21:31:51.800 回答