2017-01-30 2 views
1

In cmd versuche ich Method1 ausführen, die in einem Skript script1 Powershell ist. Method1 ist eine Methode, die einige Stunden dauern, und ich möchte einfach Feuer-und-vergessenFühren Sie Powershell-Methode von cmd und warten Sie nicht auf die Rückkehr

Welche Arbeits für mich ist die folgende:

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

Wenn ich die Zeilen über alles tun, funktioniert gut, so lange wie ich den CMD von PS geöffnet halte. Sobald ich das PS-Fenster schließe, tötet es Method1.

Also eigentlich das, was ich will, ist taht von cmd, in einer Zeile irgendwie Method1 Arbeit ohne die Abhängigkeit von dem PS-Fenster zu machen, vielleicht einen neuen Prozess erstellen .. Nicht wirklich sicher

Was ich versucht habe,

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

Es wird für einige Sekunden läuft, aber wenn die cmd schließt bekommen, als Method1 endet auch

auch versucht

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

Wieder einmal ich dies tun es aber ein PS-Fenster arbeitet geöffnet und wenn ich es in der Nähe, als es beendet Method1

EDIT von Ihnen helfen, ich habe versucht:

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

aber immer Ausnahme:

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

aber immer noch, nicht, dass ich in der Lage zu machen t Arbeit

+0

hat es funktioniert oder nicht? – 4c74356b41

Antwort

1

Sie können mit Powershell Jobs für das, so einfach:

Start-Job -FilePath somepath 

und einen Methodenaufruf am Ende des Skripts hinzufügen oder übergeben in einem Script wie:

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

oder vielleicht hackish verwenden:

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

Eigentlich kann man nur Powershell starten, ohne CMD, nicht sicher, warum ich cmd ein wurde mit NSATZ:

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

Ich schaue auf Ihre letzte Antwort, ich versuche, es von einem Cmd auszuführen, so wie ich den Start-Prozess aufrufen – user829174

+0

Ich bin mir nicht sicher, was Sie fragen, fügen Sie das in Powershell-Fenster? – 4c74356b41

+0

Sobald ich PS einfügen bekomme ich Fehler: Ampersand nicht erlaubt. Der Operator & ist für zukünftige Verwendung reserviert; Verwenden Sie "&", um kaufmännisches Und als String zu übergeben. – user829174

1

Alternativ, wenn Sie eine reine Powershell-Lösung wollen (beachten Sie dies als Admin werden muss, läuft):

Invoke-Command LocalHost -Scriptblock $script -InDisconnectedSession 

Der InDisconnectedSession Schalter läuft es in einem separaten Powershell-Sitzung, die nicht beendet werden wenn Sie das PowerShell-Fenster schließen. Sie können auch Get-PSSession verwenden und die Sitzung an Enter-PSSession übergeben, um während oder nach der Ausführung damit zu interagieren. Erinnern Sie sich in diesem Zustand, wenn Sie das Fenster schließen, wird es -kill- töten, also sollten Sie Exit-PSSession verwenden, um es am Leben zu erhalten.

Es gibt jedoch ein Problem - Sie können keine Remoting-Aufgaben tun, zumindest nicht leicht. Dies bringt den Zorn des "Doppelsprungs" mit sich, wo Sie zu einem Computer (in diesem Fall Ihren eigenen) und dann zu einem anderen Computer gelangen, und aus Sicherheitsgründen weigert PowerShell, Anmeldeinformationen an die zweite Remoting-Sitzung weiterzuleiten, so dass keine Verbindung hergestellt werden kann wenn Sie die Zugangsdaten manuell eingeben. Wenn Sie Remoting durchführen müssen, sollten Sie einen versteckten PowerShell-Prozess starten.

Verwandte Themen