2017-01-30 73 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进程。

相关问题