none
Как получить текущую директорию нужного процесса (PS) RRS feed

  • Вопрос

  • Здравствуйте,
    имеется PowerShell, запущенный от админа. Далее:
    $p=get-process process_name
    $p.StartInfo.WorkingDirectory
    Почему-то для всех процессов WorkingDirectory дает пустую строку. В чем же дело?
    8 октября 2009 г. 1:55

Ответы

  • Так не получится. StartInfo используется только для задания параметров для нового процесса. Если вам нужен текущий каталог самого приложения (powershell хоста), то:

    [System.Environment]

     

    ::CurrentDirectory

    А если нужен другой процесс... Я честно говоря не уверен что это можно сделать средствами .Net, возможно придётся использовать WinAPI. Как это делать - вот тут. Объявления функций искать например тут.


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Помечено в качестве ответа Vasily GusevModerator 3 декабря 2009 г. 21:12
    14 октября 2009 г. 9:25
    Модератор

Все ответы

  • а это не подойдет:
    $p.path
    ?
    8 октября 2009 г. 5:24
  • или так:

    Get-Process process_name| Get-Item | Select Directory

    StartInfo.WorkingDirectory используется для задания рабочей директории процесса, если мы хотим запустить его из PoSh


    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение".
    8 октября 2009 г. 5:56
  • а это не подойдет:
    $p.path
    ?

    или так: Get-Process process_name| Get-Item | Select Directory StartInfo.WorkingDirectory используется для задания рабочей директории процесса, если мы хотим запустить его из PoSh
    Нет, нужно именно текущую (рабочую) директорию процесса, а не путь к исполняемому файлу. То же самое, что в ProcessExplorer от Sysinternals называется Current Directory в свойствах процесса. Просто судя по описанию StartInfo.WorkingDirectory, это оно и есть. Или для этого нужны какие-то еще движения...
    8 октября 2009 г. 8:14
  • Get-Process | get-item  | select PSParentPath
    MSBF
    8 октября 2009 г. 15:55
  • Нет, тоже не то
    8 октября 2009 г. 16:20
  • Так не получится. StartInfo используется только для задания параметров для нового процесса. Если вам нужен текущий каталог самого приложения (powershell хоста), то:

    [System.Environment]

     

    ::CurrentDirectory

    А если нужен другой процесс... Я честно говоря не уверен что это можно сделать средствами .Net, возможно придётся использовать WinAPI. Как это делать - вот тут. Объявления функций искать например тут.


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Помечено в качестве ответа Vasily GusevModerator 3 декабря 2009 г. 21:12
    14 октября 2009 г. 9:25
    Модератор
  • Спасибо за ответ, похоже что это не так просто сделать даже через WinAPI или WMI. В отличие от линуксов, например, где все это лежит в одном файле. Ну что ж, будем думать, как без этого обойтись.
    17 октября 2009 г. 4:52
  • Кстати зачем вам это если не секрет? :)


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    17 октября 2009 г. 6:58
    Модератор
  • Да просто в одном месте понадобилось открывать командную строку в текущую директорию процесса. Зачем - это мне не сказали. Может быть, в качестве текущей директории лучше будет считать адрес какого-либо открытого программой файла (который был передан как argv[1]), но это уточним.
    17 октября 2009 г. 11:19