Как получить текущий рабочий каталог внутри командлета

Я пишу командлет для PowerShell на С#. Я создаю подкласс Cmdlet, а НЕ PSCmdlet.

Есть ли способ получить текущий каталог из PowerShell? Я мог бы сделать это с помощью PSCmdlet, используя GetVariableValue("pwd"). Но в классе Cmd у меня этого нет.

Environment.CurrentDiretory указывает мне путь, с которого был запущен PowerShell, а не место, где сейчас находится сам PowerShell.

изменить

Пример:

Я запускаю powershell через, скажем, powershell_ise.exe. Он запускается в C:\Windows\System32\WindowsPowerShell\v1.0. Затем я меняю путь с помощью cd c:\my\folder и запускаю свою команду Do-Something. Внутри реализации «Do-Something» (сторона С#) я хотел бы получить текущий путь => c:\my\folder.

Если возможно, я хотел бы избежать использования PSCmdlet.


person Hemisphera    schedule 17.06.2015    source источник
comment
Вы действительно должны использовать PSCmdlet или передать местоположение в качестве аргумента параметра из вызывающего командлета.   -  person Mathias R. Jessen    schedule 17.06.2015
comment
В настоящее время я переписываю свой код, чтобы получить его из PSCmdlet. Пока выглядит хорошо. Я немного боялся этого, потому что мне действительно не нужно многого из этого, кроме доступа к его внутренностям. А с другой стороны... как раз для этого, я думаю...   -  person Hemisphera    schedule 17.06.2015
comment
Точно, у вас есть зависимость времени выполнения (текущее местоположение) = используйте PSCmdlet   -  person Mathias R. Jessen    schedule 17.06.2015


Ответы (1)


Я начинаю в C:\Users\<myusername>. Если я знаю, введите cd.., я нахожусь в C:\Users\

Ввод (Get-Location).Path возвращает C:\Users. Это то, что вы хотите, не так ли?

В качестве альтернативы попробуйте:

WriteObject(this.SessionState.Path.CurrentFileSystemLocation);

Ссылка: Как получить текущий каталог в командлете PowerShell ?

person Marco    schedule 17.06.2015
comment
Я обновил свой первоначальный ответ примером. Я хотел бы избежать запуска дополнительных командлетов, чтобы получить мой текущий путь. Если у меня нет другого выхода. - person Hemisphera; 17.06.2015
comment
@Hemisphera Я обновил свой ответ. У меня сейчас нет доступа к LinqPad или Visual Studio, поэтому я не могу подтвердить, что это работает. - person Marco; 17.06.2015
comment
Это работает только потому, что я сейчас использую PSCmdlet. Cmdlet сам по себе не предоставляет доступ к SessionState. Но так как я закончил использовать PSCmdlet, я отмечу это как ответ. Это чище, чем GetVariableValue("pwd") далеко. Спасибо! - person Hemisphera; 17.06.2015