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