When working with PowerShell, I often need to launch external applications or processes. For these kinds of requirements, you can use the Start-Process cmdlet.
In this tutorial, I will explain everything you need to know about the PowerShell Start-Process cmdlet, including various parameters, practical examples, and common troubleshooting tips.
What is Start-Process in PowerShell?
The Start-Process cmdlet in PowerShell allows you to start one or more processes on the local computer. It gives you control over how a process starts, including options to run as an administrator, specify working directories, pass arguments, and control window styles.
I’ve found it particularly useful when:
- Running applications with elevated privileges
- Starting processes with specific arguments
- Controlling process window visibility
- Waiting for processes to complete before continuing script execution
Basic Syntax of Start-Process
Below is the complete syntax of Start-Process in PowerShell.
Start-Process [-FilePath] <String> [[-ArgumentList] <String[]>] [-Credential <PSCredential>]
[-WorkingDirectory <String>] [-LoadUserProfile] [-NoNewWindow] [-PassThru]
[-RedirectStandardError <String>] [-RedirectStandardInput <String>]
[-RedirectStandardOutput <String>] [-WindowStyle <ProcessWindowStyle>]
[-Wait] [-UseNewEnvironment] [<CommonParameters>]Let’s break down the essential parameters I use most often:
Check out PowerShell Throw Exception with Message
Method 1 – Starting a Basic Process
The simplest way to use Start-Process in PowerShell is to specify just the path to the executable you want to run.
Start-Process -FilePath "notepad.exe"This command will launch Notepad. I use this basic approach when I just need to start an application without any special requirements.
You can see I have executed the above PowerShell cmdlets, and below is the output in the screenshot:

When working with applications in the system PATH, you can simply specify the executable name. However, for applications not in the PATH, you’ll need to provide the full path:
Start-Process -FilePath "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"Check out PowerShell For Loop With Index and Range Examples
Method 2 – Running a Process with Arguments
Most of the time, I need to pass arguments to the applications I’m launching. The -ArgumentList parameter makes this easy:
Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\DataAnalysis.ps1"This launches PowerShell with specific arguments to run a script with customized settings.
For applications that require multiple arguments, you can pass them as an array:
Start-Process -FilePath "ping.exe" -ArgumentList "google.com", "-t"Method 3 – Running with Administrative Privileges
One of the most useful features of Start-Process is the ability to launch processes with elevated privileges. Here is how you can use it.
Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\SystemConfig.ps1" -Verb RunAsThe -Verb RunAs parameter triggers the User Account Control (UAC) prompt, ensuring the process runs with administrative rights. I use this constantly when my scripts need to modify system settings or access protected resources.
Read Delete User Profiles Using PowerShell in Windows 11
Method 4 – Controlling Window Style
Sometimes I need to control how the process window appears. The -WindowStyle parameter accepts four values:
- Normal
- Hidden
- Minimized
- Maximized
For example, to run a backup script without showing its window:
Start-Process -FilePath "powershell.exe" -ArgumentList "-File C:\Scripts\DailyBackup.ps1" -WindowStyle HiddenThis is particularly useful for scheduled tasks or automation where you don’t want windows popping up on the screen.
Read Generate SSH Keys with PowerShell
Method 5 – Waiting for Process Completion
When my scripts need to execute processes sequentially, I use the -Wait parameter to ensure PowerShell waits for the process to complete before continuing:
Start-Process -FilePath "C:\Program Files\7-Zip\7z.exe" -ArgumentList "a -tzip C:\Backups\Documents.zip C:\Users\Bijay\Documents" -WaitThis ensures the zip file is completely created before the script continues to the next step, which might involve moving or uploading the zip file.
Method 6 – Capturing Process Output
To capture the output of a process, I combine -RedirectStandardOutput with the -Wait parameter:
Start-Process -FilePath "ipconfig.exe" -RedirectStandardOutput "C:\Temp\ipconfig_output.txt" -Wait -NoNewWindowThis command runs ipconfig, saves its output to a text file, and waits for completion before continuing. The -NoNewWindow parameter is crucial here as it ensures the output is properly redirected.
Check out How to Open PowerShell in a Folder?
Method 7 – Working with Process Objects
When I need to interact with the process after launching it, I use the -PassThru parameter:
$process = Start-Process -FilePath "notepad.exe" -PassThru
Start-Sleep -Seconds 5
$process.Kill()This launches Notepad, waits 5 seconds, and then terminates it. The -PassThru parameter returns a process object that lets you manage the process programmatically.
Practical Examples in Business Scenarios
Now, let me show you some practical examples of using the Start-Process PowerShell cmdlet.
Example 1: Automated Software Deployment
When deploying software across multiple workstations, I often use the following PowerShell script.
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i C:\Installers\AdobeReader.msi /qn" -Wait -NoNewWindowThis silently installs Adobe Reader and waits for the installation to complete before continuing with other deployment tasks.
Example 2: Running Database Backups
For database administrators, you can use the below PowerShell cmdlets to run a database backups.
Start-Process -FilePath "sqlcmd.exe" -ArgumentList "-S SQLSERVER01 -Q 'BACKUP DATABASE CustomerDB TO DISK=''C:\Backups\CustomerDB.bak'''" -Wait -NoNewWindowThis runs a SQL Server backup command and waits for completion.
Example 3: Starting Multiple Processes in Different Directories
Start-Process -FilePath "npm.exe" -ArgumentList "start" -WorkingDirectory "C:\Projects\WebApp1"
Start-Process -FilePath "npm.exe" -ArgumentList "start" -WorkingDirectory "C:\Projects\WebApp2"This starts two Node.js applications, each in its own directory. The -WorkingDirectory parameter ensures each process runs in the correct context.
Check out List Directories and Files in PowerShell
Troubleshooting Common Issues
Here are some troubleshooting steps that you can follow while working with these PowerShell cmdlets.
Issue 1: Access Denied Errors
If you’re getting “Access Denied” errors when trying to start a process, try using -Verb RunAs:
Start-Process -FilePath "regedit.exe" -Verb RunAsIssue 2: Process Starting but Closing Immediately
If your console application starts but closes immediately, use -NoNewWindow and -Wait:
Start-Process -FilePath "ping.exe" -ArgumentList "localhost" -NoNewWindow -WaitIssue 3: Arguments Not Working as Expected
If your arguments contain spaces or special characters, ensure proper quoting:
Start-Process -FilePath "powershell.exe" -ArgumentList "-Command", "Write-Host 'Hello, San Francisco!'"Check out Track User Login History on Windows Using PowerShell
Start-Process vs. Invoke-Expression vs. Call Operator (&)
Here’s a quick comparison table to help you choose the right method for running processes:
| Feature | Start-Process | Invoke-Expression | Call Operator (&) |
|---|---|---|---|
| Run as admin | Yes (with -Verb RunAs) | No (needs additional code) | No (needs additional code) |
| Wait for completion | Yes (with -Wait) | Yes (naturally waits) | Yes (naturally waits) |
| Capture output | Yes (with redirection) | Yes (direct capture) | Yes (direct capture) |
| Security | More secure | Less secure (injection risk) | More secure |
| Complexity | More verbose | Simpler syntax | Simplest syntax |
I prefer Start-Process when I need fine-grained control over how processes run, especially for GUI applications or when administrative privileges are required.
Conclusion
The Start-Process cmdlet is used for launching applications, whether you’re developing automation scripts, deploying software, or managing system configurations.
I’ve found it particularly valuable in enterprise environments where process control, security, and reliable execution are critical. I hope you now understand how to use the PowerShell Start-Process cmdlet, using the examples I’ve shared.
If you have any questions or your own tips for using Start-Process, please share them in the comments below!
You may also like:
- Show Logged-In Users with PowerShell
- How to Remove a Computer from a Domain Using PowerShell
- Add a Computer to a Domain Using PowerShell
- Set Password Never Expires for Local User Using PowerShell
Bijay Kumar is an esteemed author and the mind behind PowerShellFAQs.com, where he shares his extensive knowledge and expertise in PowerShell, with a particular focus on SharePoint projects. Recognized for his contributions to the tech community, Bijay has been honored with the prestigious Microsoft MVP award. With over 15 years of experience in the software industry, he has a rich professional background, having worked with industry giants such as HP and TCS. His insights and guidance have made him a respected figure in the world of software development and administration. Read more.