PowerShell Tricks - Starting Without a Console Window
04 December 2013
Running an unattended PowerShell script or command on a recurring schedule is a technique that can be quite useful. The task might involve capturing some performance data, sending an alert, or cleaning up some leftover files. Once a script is written, it’s easy enough to set up a scheduled task and pass it to PowerShell.exe with the -WindowStyle Hidden and -File parameters. The problem with this method is that the console window starts up with a small flash that can be disruptive/annoying if the computer is in use at the time.
Python on Windows solves this problem by having two separate executables (python.exe and pythonw.exe). The latter starts a Python instance that suppresses the console window, running the code in the background.
I wanted something similar for PowerShell.
While it’s certainly possible to write an application in C# perhaps that hosts the PowerShell runtime without a console window, going to that length felt like overkill. The solution that I found the most workable involved adapting some old VBScript to pass the required parameters through to the real PowerShell:
' PowerShellW.vbs - Runs Powershell with no console window
Dim objShell
If WScript.Arguments.Length = 0 Then
WScript.Echo "No arguments specified"
WScript.Quit
End If
strCmd = "powershell.exe -NoLogo -NonInteractive"
For Each strArg in WScript.Arguments
If Left(strArg,1) = "-" Then
strCmd = strCmd & " " & strArg
Else
strCmd = strCmd & " " & Chr(34) & strArg & Chr(34)
End If
Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run strCmd,0
Usage 1: Execute a script in the background
powershellw -NoProfile -File C:\Scripts\YourScriptName.ps1
Usage 2: Restart a group of services
powershellw -Command "Restart-Service YourServiceName*"
comments powered by Disqus