Это появилось вчера в другом посте . По сути, скрипт-блок { <script> }
получает свои собственные $ args, которые представляют безымянные аргументы, передаваемые в него, например ::
PS> & { $OFS=', '; "`$args is $args" } arg1 7 3.14 (get-date)
$args is arg1, 7, 3.14, 03/04/2010 09:46:50
Командлет Where-Object использует блок сценариев для предоставления произвольного сценария, который оценивается как true или false. В случае Where-Object в блок скриптов не передаются безымянные аргументы, поэтому $ args должен быть пустым.
Вы нашли один обходной путь. Я бы предложил использовать именованный параметр, например:
param($Name, [switch]$WhatIf)
get-process | where {$_.Name -eq $Name} | stop-process -Force -WhatIf:$WhatIf