Ответ 1
Length
, -gt
и 10000
не являются параметрами Where-Object
. В позиции 0 есть только один параметр FilterScript
со значением типа ScriptBlock
, который содержит выражение.
PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-ChildItem");
ps.AddCommand("where-object");
ScriptBlock filter = ScriptBlock.Create("$_.Length -gt 10000")
ps.AddParameter("FilterScript", filter)
Если у вас есть более сложные инструкции, которые нужно разложить, подумайте об использовании токенизатора (доступного в версии v2 или новее), чтобы лучше понять структуру:
# use single quotes to allow $_ inside string
PS> $script = 'Get-ChildItem | where-object -filter {$_.Length -gt 1000000 }'
PS> $parser = [System.Management.Automation.PSParser]
PS> $parser::Tokenize($script, [ref]$null) | select content, type | ft -auto
Это выдает следующую информацию. Это не так богато, как анализатор АСТ в версии 3, но он по-прежнему полезен:
Content Type ------- ---- Get-ChildItem Command | Operator where-object Command -filter CommandParameter { GroupStart _ Variable . Operator Length Member -gt Operator 1000000 Number } GroupEnd
Надеюсь, что это поможет.