Вычисленное значение Powershell в предложении where-object - PullRequest
1 голос
/ 27 мая 2020

Я стараюсь сделать мой скрипт Powershell как можно проще. Но у меня проблемы с предложением where-object. Следующий код делает то, что я хочу:

# define calculated variables 
$mytime = @{label="Time";expression={$_.timegenerated}}
$myeid  = @{l="EID";e={$_.instanceid -band 0xffff}}
$mymsg  = @{l="Msg 1st 20";e={$_.message.substring(0,20)}}

# get data
Get-Eventlog system |
  where-object { ( $_.instanceid -band 0xffff ) -eq 6005} |
  select-object -first 10 instanceid,
    $mytime,
    $myeid,
    $mymsg

Но я думал, что было бы проще, если бы объект where мог использовать $ myeid

...
  where-object { $myeid -eq 6005} |
...

Но я не получить какие-либо результаты, когда я использую это предложение where-object. Я пробовал различные комбинации заключать его в фигурные скобки, круглые скобки и $ (...), но безуспешно. Что мне не хватает?

Позже я обнаружил, что уже существует свойство сценария для извлечения EventID, но мне все еще интересно, почему это не работает.

1 Ответ

1 голос
/ 27 мая 2020

$ myeid - это просто хеш-таблица со строкой и блоком сценария. Select-объект запрограммирован на его использование. Каким-то образом вам придется запустить блок сценария $ myeid.e, чтобы получить от него значение. Это близко к вашему исходному коду. Без круглых скобок "-eq 6005" игнорируется. Я добавил 0xf0000 к 6005.

$myeid  = @{l="EID";e={$_.instanceid -band 0xffff}}
@{instanceid=989045} | where-object { (& $myeid.e) -eq 6005}

Name                           Value
----                           -----
instanceid                     989045
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...