2017-01-30 330 views
1

在cmd我試圖運行Method1這是在腳本script1 powershell。 Method1是需要幾個小時的方法,我只是想發射後不管從cmd運行powershell方法,不要等待它的返回

是以下什麼工作對我來說:

c:\temp>powershell 
PS c:\temp>. .\script1.ps1;Method1 

當我做高於一切的線路工作正常,只要因爲我保持PS的CMD打開。一旦我關閉了PS窗口,它就會殺死Method1

所以其實我要的是從CMD taht,在一行中,以某種方式使Method1工作沒有PS窗口的依賴,可能創建新的進程..不能確定

我已經試過是

c:\temp>cmd /c powershell . .\script1.ps1;Method1 

它運行幾秒鐘,但是當CMD得到關閉,比Method1也終止

也試過

c:\temp>cmd /c powershell -noexit "& { . .\script.ps1;Method1 }" 

同樣,一旦我做到這一點,它正在然而一個PS窗口被打開,如果我關閉它比它終止Method1

編輯 你的幫助,我已經試過:

c:\temp>cmd /c powershell start-process cmd /c powershell . .\script1.ps1;Method1 

,但得到的異常:

Start-Process : A positional parameter cannot be found that accepts argument 'powershell'.

,但仍然不能夠讓我將不起作用

+0

它工作與否? – 4c74356b41

回答

1

您可以使用PowerShell喬布斯對於這一點,所以才:

Start-Job -FilePath somepath 

,並在腳本的末尾添加一個方法調用,或在腳本塊傳似:

Start-Job -ScriptBlock {. .\path_to_ps1; Method1} 

或者可能使用hackish:

start-process cmd -WindowStyle Hidden -ArgumentList "'/c powershell . .\script1.ps1;Method1'" 

實際上,您可以在沒有CMD的情況下啓動Powershell,不確定爲什麼我使用cmd a接近角:

start-process powershell -WindowStyle Hidden -ArgumentList ". .\script1.ps1;Method1" 
+0

我正在看你的最後一個答案,我試圖從cmd運行它,所以我如何調用啓動過程 – user829174

+0

我不確定你在問什麼,只需將其粘貼到PowerShell窗口? – 4c74356b41

+0

一旦我粘貼到PS我得到錯誤:&符不允許。 &運算符保留供將來使用;使用「&」將字符串作爲字符串傳遞。 – user829174

1

或者,如果你想要一個純粹的PowerShell的解決方案(注意這需要運行作爲管理員):

Invoke-Command LocalHost -Scriptblock $script -InDisconnectedSession 

InDisconnectedSession開關運行它不會被終止單獨PowerShell會話當你關閉PowerShell窗口。您還可以使用Get-PSSession並將會話傳遞給Enter-PSSession以在執行期間或執行後與其進行交互。記住在這個狀態下,如果你關閉它的窗口 - 將殺死它,所以你會想要使用Exit-PSSession來保持它的活着。

然而,有一個問題 - 你不能做任何遠程處理任務,至少不容易。這會引起「雙跳」的憤怒,在這種情況下,您遠程訪問一臺計算機(本例中爲您自己),然後再訪問另一臺計算機,並且爲了安全性,PowerShell拒絕將任何憑據傳遞給第二個遠程會話,因此無法連接,甚至如果您手動輸入憑據。如果你確實需要做遠程處理,我建議堅持啓動一個隱藏的PowerShell進程。