2015-03-05 3 views
0

Я хочу идентифицировать процессы, которые выполняются из определенной родительской структуры пути dir во время выполнения.Динамическое регулярное выражение против process.Path в powershell

Я пытаюсь безуспешно:

$INSTALL_PATH=$ENV:PROGRAMFILES + "\my-ag\products" + $PVER 
$ESCAPE_PATH=[regex]::escape("^" + $INSTALL_PATH + ".*") 

$REGEX_PATH=[regex]$ESCAPE_PATH 

if (test-path $INSTALL_PATH) { 
    get-process java | foreach{ 
     $pName = $_ 

     if ($pName.Path -match $ESCAPE_PATH) { 
      # No printed, however there are 2 process running. 
      write-output $pName.Path 
     } 

     if ($REGEX_PATH.Match($pName.Path)) { 
      # prints all process even not from $INSTALL_PATH. 
      write-output $pName.Path 
     } 
    } 
} 
exit 0 

Как звонить/правильно использовать модуль регулярных выражений, чтобы соответствовать пути?

Спасибо!

+0

Для меня это не так ясно. Вы должны указать примеры путей, которые вы хотите распечатать, и путь, который вы не хотите печатать. – JPBlanc

+0

Код печатает две строки: 'C: \ Program Files (x86) \ Java \ jre7 \ bin \ java.exe' и ' C: \ Program Files (x86) \ my-ag \ products5.0 \ thirdparty \ java \ bin \ java.exe' Я хочу только напечатать последний. Могут быть другие программы, запущенные из 'C: \ Program Files (x86) \ my-ag \ products5.0 \', которые я хочу завершить. – jessarah

ответ

0

Он не использует модуль [регулярное выражение] Я пытался использовать первый, однако помогает мне соответствовать процессы, выполняющиеся под install_path:

$INSTALL_PATH=$ENV:PROGRAMFILES + "\my-ag\products" + $PVER 
function remove_prev_installation { 
    if (test-path $INSTALL_PATH) { 
     get-process | foreach{ 
      $pName = $_ 
      write-output ("Path ..: " + $pName.Path) 
      if ($pName.Path -like ($INSTALL_PATH + '*')) { 
       write-output ("Will kill .. " + $pName.Path) 
       # $pName.id | get-member 
       Stop-Process $pName.id #-WhatIf 
       $KILLED_P = 1 
      } 
     } 
     if ($KILLED_P) { 
      Start-Sleep -s 3 
      Remove-Item -Force -Recurse $INSTALL_PATH 
     } 
    } 
} 
remove_prev_installation 

Не уверен, что если в данном случае это действительно необходимо подождать 3 секунды перед удалением файлов, однако были и другие случаи, когда дескрипторы файлов не были сразу выпущены, и в ожидании пары секунд решена проблема.

ура!

Смежные вопросы