C# cmdlet中的调用集位置
我正在为PowerShell创建cmdlet,我需要能够从cmdlet中调用C# cmdlet中的调用集位置,c#,powershell,cmdlets,C#,Powershell,Cmdlets,我正在为PowerShell创建cmdlet,我需要能够从cmdlet中调用Set Location(也称cd)。我会这样做 var setLocation = new Microsoft.PowerShell.Commands.SetLocationCommand(); setLocation.Path = path; setLocation.Invoke(); 除了它给我的错误是,您不能调用从PSCmdlet派生的cmdlet。我想使用设置位置,但我很乐意只更改shell的目录。只需在脚本
Set Location
(也称cd
)。我会这样做
var setLocation = new Microsoft.PowerShell.Commands.SetLocationCommand();
setLocation.Path = path;
setLocation.Invoke();
除了它给我的错误是,
您不能调用从PSCmdlet
派生的cmdlet。我想使用设置位置
,但我很乐意只更改shell的目录。只需在脚本中使用设置位置就可以了
例如:
# Script.ps1
CD ~
Get-Location
Set-Location c:\Windows
Get-location
脚本完成后,再次尝试获取位置 如果我在脚本中使用Set Location,我通常会首先使用Push Location来存储当前位置,然后在脚本结束时,我可以使用Pop Location将用户返回到他们所在的位置
Push-Location $PWD
Set-Location $somewhere
#script body
Pop-Location
当然,除非脚本的目的是为用户更改目录。您可以尝试从CMDLET而不是PSCMDLET派生。我能找到的最佳答案是使用
InvokeScript
更改目录:
InvokeCommand.InvokeScript(string.Format("Set-Location {0}", fullPath));
有可能有一种“更多的C#”方法可以做到这一点,但我找不到它。这个问题有点老,但这里有一个更好的解决方案: 该类包含该方法 要操纵当前会话的路径,可以使用属性通过访问 长话短说:
SessionState.Path.SetLocation("C:/some/path");
我在cmdlet中,而不是脚本中为什么不?如果我使用的脚本没有从更改位置中获得任何好处,它只会更改位置以使脚本更易于编写,如果脚本运行后我不在起始位置,它会让我感到恼火。例如,如果您运行dir'c:\program files',您不会期望在运行之后您的位置被更改为c:\program files,是吗?