Frage

Wie ist es möglich, ein Powershell Skript ohne ein Fenster anzuzeigen oder andere Zeichen laufen der Benutzer?

Mit anderen Worten, das Skript ohne Anzeichen für den Benutzer unbemerkt im Hintergrund ausgeführt werden.

Zusatz Kredit für eine Antwort, die nicht Komponenten von Drittanbietern nicht verwendet:)

War es hilfreich?

Lösung

Sie können entweder es so laufen (aber dies zeigt ein Fenster für eine Weile):

PowerShell.exe -windowstyle hidden { your script.. }

Oder Sie verwenden, um eine Hilfsdatei erstellt ich das Fenster zu vermeiden PsRun.exe genannt, das genau funktioniert das. Sie können Quell- und EXE-Datei Führen Sie geplante Tasks mit WinForm GUI in Powershell . Ich benutze es für geplante Aufgaben.

Editiert:. Marco dieser -windowstyle Parameter ist für V2 nur darauf hingewiesen,

Andere Tipps

Sie können über die Powershell Community-Erweiterungen und dies tun:

start-process PowerShell.exe -arg $pwd\foo.ps1 -WindowStyle Hidden

Sie können auch tun dies mit VBScript: http://blog.sapien.com/index.php/2006/12/26/more-fun-with-scheduled-powershell/

(Via ).

Hier ist ein Ansatz, dass nicht Befehlszeile args oder einen separaten Launcher erfordert. Es ist nicht völlig unsichtbar, weil ein Fenster für einen Moment beim Start zeigen wird. Aber dann verschwindet schnell. Wo das ist OK, das ist, glaube ich, ist die einfachste Methode, wenn Sie Ihr Skript starten, indem Sie einen Doppelklick im Explorer oder über eine Verknüpfung im Startmenü möchten (einschließlich natürlich den Startup-Untermenü). Und Ich mag, dass es Teil des Codes des Skripts ist selbst nicht etwas Äußerliches.

Setzen Sie diese an der Vorderseite des Skripts:

$t = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);'
add-type -name win -member $t -namespace native
[native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0)

Ich habe das gleiche Problem. Ich fand heraus, wenn Sie die Task gehen in Taskplaner , dass läuft die powershell.exe Skript, klicken Sie auf „ Ausführen ob Benutzer oder nicht “angemeldet sind, und das wird nie zeigt die Powershell-Fenster, wenn die Aufgabe ausgeführt wird.

Ich war mit diesem Problem, wenn sie von c # ausgeführt wird, auf Windows 7, wurde Aufspringen des „Interactive Services Detection“ Dienst auf, wenn ein verstecktes Powershell-Fenster als das Systemkonto ausgeführt wird.

die "CreateNoWindow" Parameter werden verhindert der ISD Service popping Warnung es auf.

process.StartInfo = new ProcessStartInfo("powershell.exe",
    String.Format(@" -NoProfile -ExecutionPolicy unrestricted -encodedCommand ""{0}""",encodedCommand))
{
   WorkingDirectory = executablePath,
   UseShellExecute = false,
   CreateNoWindow = true
};

Hier ist ein Einzeiler:

mshta vbscript:Execute("CreateObject(""Wscript.Shell"").Run ""powershell -NoLogo -Command """"& 'C:\Example Path That Has Spaces\My Script.ps1'"""""", 0 : window.close")

Auch wenn es möglich ist, für diese sehr kurz ein Fenster zu blinken, das ein seltenes Ereignis sein sollte.

Ich denke, dass der beste Weg, um den Konsolenbildschirm des Powershell zu verbergen, wenn Sie ein Hintergrund-Skripte ausgeführt ist dieser Code (" Bluecakes Antwort“ ).

Ich füge diesen Code am Anfang aller meiner Powershell-Skripts, die ich im Hintergrund ausgeführt werden müssen.

# .Net methods for hiding/showing the console in the background
Add-Type -Name Window -Namespace Console -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();

[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'
function Hide-Console
{
    $consolePtr = [Console.Window]::GetConsoleWindow()
    #0 hide
    [Console.Window]::ShowWindow($consolePtr, 0)
}
Hide-Console
  

Wenn diese Antwort war Hilfe Sie, stimmen Sie bitte " Bluecakes“in seiner Antwort in diesem Beitrag.

Ich habe ein kleines Tool, das Bestehen der Anruf an jeder Konsole Werkzeug, das Sie fensterlos starten durch auf die Originaldatei erstellt werden soll:

https://github.com/Vittel/RunHiddenConsole

Nach dem Kompilieren benennen Sie die ausführbare Datei auf „ w.exe“ (ein „w“ anhängen), und legte sie neben der ursprünglichen ausführbaren Datei. Sie können dann rufen z powershellw.exe mit den üblichen Parametern und es wird nicht ein Fenster eingeblendet.

Wenn jemand hat eine Idee, wie Sie überprüfen, ob der erstellte Prozess auf eine Eingabe wartet, krank gerne Ihre Lösung umfassen:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top