2

我正在为 PowerShell 创建一个 cmdlet,我需要能够从 cmdlet 中调用Set-Location(aka cd)。我会这样做

var setLocation = new Microsoft.PowerShell.Commands.SetLocationCommand();
setLocation.Path = path;
setLocation.Invoke();

除了它给了我一个错误,上面写着You cannot invoke a cmdlet that derrives from PSCmdlet。我想使用Set-Location,但我很乐意只更改 shell 的目录。

4

5 回答 5

2

我能找到的最佳答案是用于InvokeScript更改目录:

InvokeCommand.InvokeScript(string.Format("Set-Location {0}", fullPath));

可能有一种“更多的 C#”方法可以做到这一点,但我找不到它。

于 2012-08-05T03:00:56.487 回答
1

这个问题有点老,但这里有一个更好的解决方案:

PathIntrinsics类包含方法SetLocation

要操作当前会话的路径,您可以使用Path属性通过SessionState访问PathIntrinsics 。

长话短说:

SessionState.Path.SetLocation("C:/some/path");
于 2021-03-02T11:50:37.280 回答
0

您可以尝试从 CMDLET 而不是 PSCMDLET 派生。

于 2012-08-04T12:52:57.280 回答
-1

只需在脚本中使用 Set-Location 即可完成工作。

例如:

# Script.ps1
CD ~
Get-Location
Set-Location c:\Windows
Get-location

脚本完成后,再次尝试 Get-Location!

于 2012-08-02T12:26:44.933 回答
-1

如果我在脚本中使用 Set-Location,我通常喜欢先使用 Push-Location 来存储当前位置,然后在脚本结束时使用 Pop-Location 将用户返回到他们所在的位置。

Push-Location $PWD
Set-Location $somewhere
#script body
Pop-Location

当然,除非脚本的目的是为用户更改目录。

于 2012-08-03T04:51:43.530 回答