我正在尋找使用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
你試過的正確元素'-contains'?通知看起來像一個數組。 – gvee
是的,我做過了(在問題中提到)。但是,它沒有返回任何結果。我應該把我在這裏使用的命令的來源。它來自這個模塊 - [dbatools](https://dbatools.io/) – walt
我不清楚你想要過濾的結果的哪一部分。該cmdlet返回一些警報,每個警報都包含一些通知,其中每行包含多個值。如果您嘗試將字符串與DataRow(Notifications DataTable中的單個條目)進行比較,當然會失敗。你需要考慮DataTable柱(如你的例子中的「OperatorName」) – TToni