2013-04-30 1 views
1

Я пишу сценарий, чтобы завершить процесс, идентифицированный его вызовом Commandline. Он отлично работает, если я жёстко его как:Escaping args [0] in Powershell

Get-WmiObject Win32_Process -Filter "CommandLine LIKE '%worker04%'" | Invoke-WmiMethod -Name Terminate 

Теперь я хочу работать с параметром, как это:

Get-WmiObject Win32_Process -Filter "CommandLine LIKE '%$args[0]%'" | Invoke-WmiMethod -Name Terminate 

так что я могу назвать мой сценарий, как это:

.\killprocess worker04 

Пока он ничего не делает. Как правильно поместить $args[0] в блок -Filter?

+0

Не используйте '$ args' в первую очередь. Используйте именованные параметры. – alroc

ответ

3

Я думаю, что это будет делать:

Get-WmiObject Win32_Process -Filter "CommandLine LIKE '%$($args[0])%'" | Invoke-WmiMethod -Name Terminate 
1

У меня такая же проблема, в течение цикла и %$($args[0])% не работает для меня. Я сделал это с чем-то вроде этого:

for($i; $i -lt $args.length ;$i++) 
{ 
$arg=$args[$i] 
Get-WmiObject Win32_Process -Filter "CommandLine LIKE '$arg'...... 
} 

Он отлично работает здесь.