【问题标题】:How to get current working directory inside a Cmdlet如何在 Cmdlet 中获取当前工作目录
【发布时间】:2015-09-02 18:35:17
【问题描述】:

我正在用 C# 为 PowerShell 编写 Cmdlet。我正在继承 Cmdlet 而不是 PSCmdlet

有没有办法从 PowerShell 获取当前目录?我可以通过PSCmdlet 使用GetVariableValue("pwd") 来做到这一点。但是在 Cmd 类中我没有。

Environment.CurrentDiretory 指向启动 powershell 的路径,而不是 PowerShell 本身当前所在的路径。

编辑

例子:

我通过 - 比如说 - powershell_ise.exe 启动了 powershell。它在C:\Windows\System32\WindowsPowerShell\v1.0 中启动。然后我使用cd c:\my\folder 更改路径并运行我的命令Do-Something。在“Do-Something”(C# 端)的实现中,我希望能够检索当前路径 => c:\my\folder

如果可能,我想避免使用PSCmdlet

【问题讨论】:

  • 您确实应该使用 PSCmdlet 或将位置作为参数从调用 cmdlet 传递。
  • 我目前正在重写我的代码以派生自 PSCmdlet。到目前为止看起来不错。我有点害怕它,因为我真的不需要它,除了访问它的内部。另一方面......我猜这正是它的目的......
  • 没错,你有一个运行时依赖(当前位置)= 使用 PSCmdlet

标签: c# powershell cmdlet


【解决方案1】:

我从C:\Users\<myusername> 开始。如果我知道输入cd.. 我在C:\Users\

输入(Get-Location).Path 返回C:\Users。这就是你想要的,不是吗?

另类尝试:

WriteObject(this.SessionState.Path.CurrentFileSystemLocation);

参考:How can I get the current directory in PowerShell cmdlet?

【讨论】:

  • 我用一个例子更新了我的原始答案。我想避免运行更多 cmdlet 来获取当前路径。除非我别无他法。
  • @Hemisphera 我已经更新了我的答案。我现在无法访问 LinqPad 或 Visual Studio,所以我无法确认这是否有效,
  • 它之所以有效,是因为我现在使用PSCmdlet。单独的Cmdlet 不提供对SessionState 的访问。但由于我最终使用了PSCmdlet,我将其标记为已回答。它比GetVariableValue("pwd") anway 干净。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-06-19
  • 2021-01-18
相关资源
最近更新 更多