Добавление нескольких операторов -and и -or в предложение WHERE в Powershell - PullRequest
0 голосов
/ 15 июня 2019

В настоящее время я использую Powershell и пытаюсь отсортировать данные в моей переменной, которые я извлекаю из другой системы.В настоящее время я пытаюсь использовать операторы -and и -or после знака -eq.Так что мне было интересно, как мне правильно использовать синтаксис в моем операторе where.

$DLPList | Select Node.NodeName, Properties.OSType, PropsView.version, Node.NodeTextPath2 | where PropsView.version -ne '1.4.706.172' -and (Properties.OSType -eq $win7 -or $win8 -or $win81 -or $win10)

Я знаю, что есть еще несколько вещей, но все, что я пробовал до сих пор, не работает.Спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 25 июня 2019

Да, вы должны использовать версию скрипта блока where-object.Также обратите внимание, что -and и -or имеют РАВНОЕ ПРЕЦЕДЕНТНОСТЬ в powershell, что очень необычно для языка.

0 голосов
/ 25 июня 2019

Хорошо, я понял, что вы не можете просто добавить use -or. Вместо этого вы должны сделать Properties.ostype для каждого. Вот код, который я придумал, чтобы заставить его работать. Также небольшой совет - использовать Where-Object перед Select-Object для экономии вычислительной мощности.

$DLPList = $list1 | Where-Object{ $_.'UDLP.prodversion' -lt '9.5.704.112' -and ($_.'Properties.OSType' -ne 'Windows XP') -and ($_.'EPOComputerProperties.OSType' -ne 'Windows Vista') -and ($_.'EPOComputerProperties.OSType' -ne 'Windows 2003') -and ($_.'Properties.OSType' -ne 'Windows 2003 R2') -and ($_.'EPOComputerProperties.OSType' -ne 'Windows 2008') -and ($_.'Properties.OSType' -ne 'Windows 2008 R2') -and ($_.'Properties.OSType' -ne 'Windows Server 2012' -and ($_.'Properties.OSType' -ne 'Windows Server 2012 R2') -and ($_.'Properties.OSType' -ne 'Windows Server 2016')) } | Select-Object Node.NodeName, Properties.OSType, UDLP.productversion, Node.NodeText | Sort-Object -Property Node.NodeText -Descending
0 голосов
/ 15 июня 2019

Попробуйте добавить скобки и заменить цепочечные логические операторы условием оператора регулярного выражения "-match":

$DLPList | Select Node.NodeName, Properties.OSType, PropsView.version, Node.NodeTextPath2 | where { $_.'PropsView.version' -ne '1.4.706.172' -and ($_.'Properties.OSType' -match "($win7|$win8|$win81|$win10)") }

Вот пример кода, который мне подходит:

$DLPList = @(2, 4, 6, 7)
$DLPList | where { ($_ -ne 7) -and ($_ -lt 10) -and ($_ -gt 0) }
2
4
6

$DLPList | where { ($_ -ne 7) -and ($_ -match "(4|5|11)" -and ($_ -gt 0)) }
4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...