2012-08-02 25 views
2

我正在爲PowerShell創建一個cmdlet,我需要能夠從該cmdlet中調用Set-Location(又名cd)。我會這樣做從一個cmdlet中調用Set-Location

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

除了它給了我一個錯誤,說You cannot invoke a cmdlet that derrives from PSCmdlet。我想使用Set-Location,但只需更改shell的目錄即可。

回答

2

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

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

這可能是因爲有一個「多C#」的方式做到這一點,但我找不到它。

-1

只需使用腳本中的Set-Location就可以完成這項工作。

因此,例如:

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

一旦腳本完成後,再試一次獲取地點!

+1

我在一個cmdlet中,而不是一個腳本 – kelloti 2012-08-02 13:31:43

-1

如果我在腳本中使用Set-Location,我通常喜歡先使用Push-Location來存儲當前位置,然後在腳本結尾處我可以使用Pop-Location將用戶返回到他們所在的位置。

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

除非當然,腳本的目的是改變用戶的目錄。

+0

嗯...........否 – kelloti 2012-08-03 13:49:05

+0

爲什麼不呢?如果我使用的腳本不會改變我的位置,那麼它只會改變位置以使腳本更容易編寫,如果在腳本運行後我不在我的起始位置,則會使我煩惱。例如,如果你運行dir'c:\ program files',你不會指望在運行後你的位置被更改爲c:\ program files了嗎? – 2012-08-07 16:31:35

+0

我想要一個cmdlet。這是C#代碼,而不是PowerShell。 – kelloti 2012-08-07 16:34:04

0

你可以嘗試從CMDLET派生而不是PSCMDLET。