Slik kjører du en Powershell script uten å vise et vindu?

stemmer
88

Hvordan er det mulig å kjøre en Powershell script uten å vise et vindu eller andre tegn til brukeren?

Med andre ord, bør skriptet kjøre stille i bakgrunnen uten noen tegn til brukeren.

Ekstra kreditt for et svar som ikke bruker tredjeparts komponenter :)

Publisert på 26/11/2009 klokken 05:45
kilden bruker
På andre språk...                            


10 svar

stemmer
17

Du kan bruke Powershell fellesskaps Extensions og gjøre dette:

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

Du kan også gjøre dette med VBScript: http://blog.sapien.com/index.php/2006/12/26/more-fun-with-scheduled-powershell/

(Via denne forumtråden .)

Svarte 26/11/2009 kl. 05:58
kilden bruker

stemmer
91

Du kan enten kjøre det som dette (men dette viser en windows for en stund):

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

Eller du bruker en hjelper fil jeg opprettet for å unngå vindu som heter PsRun.exe som gjør akkurat det. Du kan laste ned kildekode og exe fil kjøre planlagte oppgaver med WinForm GUI i Powershell . Jeg bruker det for planlagte oppgaver.

Redigert: da Marco bemerket dette -windowstyle parameteren er kun tilgjengelig for V2.

Svarte 26/11/2009 kl. 08:22
kilden bruker

stemmer
4

Jeg hadde dette problemet når du kjører fra C #, Windows 7, "Interactive Services Detection" service var dukker opp når du kjører en skjult Powershell vindu som SYSTEM-kontoen.

Bruke "CreateNoWindow" parameter hindret ISD tjenesten dukker opp er det advarsel.

process.StartInfo = new ProcessStartInfo("powershell.exe",
    String.Format(@" -NoProfile -ExecutionPolicy unrestricted -encodedCommand ""{0}""",encodedCommand))
{
   WorkingDirectory = executablePath,
   UseShellExecute = false,
   CreateNoWindow = true
};
Svarte 29/01/2014 kl. 03:47
kilden bruker

stemmer
9

Her er en tilnærming som som ikke krever kommandolinje args eller en egen bærerakett. Det er ikke helt usynlig fordi et vindu ikke vise et øyeblikk ved oppstart. Men det da forsvinner raskt. Hvor det er OK, dette er, tror jeg, den enkleste metoden hvis du ønsker å starte skriptet ved å dobbeltklikke i explorer, eller via en Start-menyen snarvei (inkludert, selvfølgelig oppstartsmenyen). Og jeg liker at det er en del av koden av manuset selv, ikke noe ytre.

Sett dette på forsiden av skriptet:

$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)
Svarte 16/01/2015 kl. 18:40
kilden bruker

stemmer
3

Her er en one-liner:

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

Selv om det er mulig for denne å blinke et vindu veldig kort, bør det være en sjelden forekomst.

Svarte 03/08/2017 kl. 01:46
kilden bruker

stemmer
1

Jeg tror at den beste måten å skjule konsollen skjermen på Powershell når kjører en bakgrunn skript er denne koden ( " Bluecakes " svar).

Jeg legger denne koden i begynnelsen av alle mine Powershell script som jeg trenger for å kjøre i bakgrunnen.

# .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

Hvis dette svaret var hjelpe deg, kan du stemme på "Bluecakes" i sitt svar i dette innlegget.

Svarte 25/09/2017 kl. 20:08
kilden bruker

stemmer
1

Jeg hadde det samme problemet. Jeg fant ut om du går til Task i Task Scheduler som kjører powershell.exe skriptet, kan du klikke " Kjør om bruk er logget på eller ikke ", og som aldri vil vise Powershell vinduet når oppgaven kjører.

Svarte 31/05/2018 kl. 17:35
kilden bruker

stemmer
1

Jeg har laget et lite verktøy som går samtalen til noen konsoll verktøy du ønsker å starte vindu gjennom til den opprinnelige filen:

https://github.com/Vittel/RunHiddenConsole

Etter kompilering bare endre navn på den kjørbare til "<targetExecutableName> w.exe" (legg en "w"), og sette den ved siden av den opprinnelige kjørbar. Du kan deretter ringe eG powershellw.exe med de vanlige parametrene, og det vil dukke opp et vindu.

Hvis noen har en anelse om hvordan å sjekke om laget prosessen venter på innspill, ill være glad for å inkludere løsning :)

Svarte 17/11/2018 kl. 17:56
kilden bruker

stemmer
0

Her er en morsom demo for å kontrollere de ulike statene i konsollen, inkludert minimere og skjult.

Add-Type -Name ConsoleUtils -Namespace WPIA -MemberDefinition @'
   [DllImport("Kernel32.dll")]
   public static extern IntPtr GetConsoleWindow();
   [DllImport("user32.dll")]
   public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'@

$ConsoleMode = @{
 HIDDEN = 0;
 NORMAL = 1;
 MINIMIZED = 2;
 MAXIMIZED = 3;
 SHOW = 5
 RESTORE = 9
 }

$hWnd = [WPIA.ConsoleUtils]::GetConsoleWindow()

$a = [WPIA.ConsoleUtils]::ShowWindow($hWnd, $ConsoleMode.MAXIMIZED)
"maximized $a"
Start-Sleep 2
$a = [WPIA.ConsoleUtils]::ShowWindow($hWnd, $ConsoleMode.NORMAL)
"normal $a"
Start-Sleep 2
$a = [WPIA.ConsoleUtils]::ShowWindow($hWnd, $ConsoleMode.MINIMIZED)
"minimized $a"
Start-Sleep 2
$a = [WPIA.ConsoleUtils]::ShowWindow($hWnd, $ConsoleMode.RESTORE)
"restore $a"
Start-Sleep 2
$a = [WPIA.ConsoleUtils]::ShowWindow($hWnd, $ConsoleMode.HIDDEN)
"hidden $a"
Start-Sleep 2
$a = [WPIA.ConsoleUtils]::ShowWindow($hWnd, $ConsoleMode.SHOW)
"show $a"
Svarte 01/09/2019 kl. 18:42
kilden bruker

stemmer
0

ps1 skjult fra Oppgaveplanlegging og snarvei for

    mshta vbscript:Execute("CreateObject(""WScript.Shell"").Run ""powershell -ExecutionPolicy Bypass & 'C:\PATH\NAME.ps1'"", 0:close")
Svarte 15/12/2019 kl. 17:09
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more