Invoke-Command lets you run commands on one or many computers from your own computer. It helps you control other machines easily without logging into each one.
Invoke-Command in PowerShell
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
PowerShell
Invoke-Command -ComputerName <string[]> -ScriptBlock { <commands> } [-Credential <PSCredential>] [-ArgumentList <object[]>]-ComputerName specifies the target computers.
-ScriptBlock contains the commands to run remotely.
Examples
Get-Process on the computer named Server01.PowerShell
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process }Get-Service on two computers: Server01 and Server02.PowerShell
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Get-Service }PowerShell
Invoke-Command -ComputerName Server01 -ScriptBlock { param($name) Write-Output "Hello, $name" } -ArgumentList 'Alice'Sample Program
This runs the Get-Date command on your own computer (localhost) and shows the current date and time.
PowerShell
Invoke-Command -ComputerName localhost -ScriptBlock { Get-Date }Important Notes
You can run commands on your own computer by using localhost as the computer name.
Make sure remote computers allow remote commands (PowerShell Remoting must be enabled).
Use -Credential to provide a username and password if needed.
Summary
Invoke-Command runs commands on remote or local computers easily.
It helps automate tasks across many machines without manual login.
Use -ComputerName and -ScriptBlock to specify where and what to run.
Practice
1. What is the primary purpose of the
Invoke-Command cmdlet in PowerShell?easy
Solution
Step 1: Understand the cmdlet's function
Invoke-Commandis designed to run commands remotely or locally on one or more computers.Step 2: Compare options
Options A, B, and C describe unrelated tasks like user management, file editing, or log viewing, which are not the main purpose ofInvoke-Command.Final Answer:
To run commands on remote or local computers -> Option BQuick Check:
Invoke-Command runs commands remotely or locally [OK]
Hint: Invoke-Command runs scripts on other computers [OK]
Common Mistakes:
- Confusing Invoke-Command with file editing cmdlets
- Thinking it only works locally
- Assuming it manages user accounts
2. Which of the following is the correct syntax to run a script block on a remote computer named 'Server01' using
Invoke-Command?easy
Solution
Step 1: Identify correct parameter usage
The-ComputerNameparameter expects the remote computer's name, and-ScriptBlockexpects a script block enclosed in braces.Step 2: Validate syntax correctness
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process } correctly uses-ComputerName Server01and-ScriptBlock { Get-Process }. Other options misuse parameters or omit braces.Final Answer:
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process } -> Option AQuick Check:
Correct syntax uses -ComputerName and script block braces [OK]
Hint: Use braces {} for script block and -ComputerName for target [OK]
Common Mistakes:
- Omitting braces around script block
- Placing computer name inside braces
- Using script block without braces
3. What will be the output of this command?
Invoke-Command -ComputerName localhost -ScriptBlock { 2 + 3 }medium
Solution
Step 1: Understand command execution on localhost
The command runs the script block{ 2 + 3 }on the local computer named 'localhost'.Step 2: Calculate the script block result
The expression2 + 3evaluates to 5, so the output will be 5.Final Answer:
5 -> Option CQuick Check:
2 + 3 = 5 [OK]
Hint: Script block runs and returns result, not expression text [OK]
Common Mistakes:
- Expecting the expression as string output
- Assuming remote computer error on localhost
- Thinking output is null
4. You run this command:
But get an error: "Access is denied." What is the most likely cause?
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Service }But get an error: "Access is denied." What is the most likely cause?
medium
Solution
Step 1: Analyze the error message
"Access is denied" indicates a permissions issue, not syntax or cmdlet existence.Step 2: Match error to cause
Permission problems usually mean the user lacks rights to run remote commands on Server01.Final Answer:
You do not have permission to run commands on Server01 -> Option DQuick Check:
Access denied = permission issue [OK]
Hint: Access denied usually means permission problem [OK]
Common Mistakes:
- Assuming syntax error causes access denied
- Thinking server offline causes access denied
- Believing cmdlet absence causes access denied
5. You want to run a command on multiple remote computers: Server01, Server02, and Server03. Which command correctly runs
Get-EventLog -LogName System -Newest 5 on all three at once?hard
Solution
Step 1: Understand how to specify multiple computers
The-ComputerNameparameter accepts an array of strings to target multiple computers.Step 2: Evaluate options for correct array syntax
Invoke-Command -ComputerName @('Server01', 'Server02', 'Server03') -ScriptBlock { Get-EventLog -LogName System -Newest 5 } uses an array@('Server01', 'Server02', 'Server03'), which is the correct way to pass multiple names. Invoke-Command -ComputerName Server01 Server02 Server03 -ScriptBlock { Get-EventLog -LogName System -Newest 5 } uses space-separated names without commas or array syntax, which is invalid. Invoke-Command -ComputerName 'Server01 Server02 Server03' -ScriptBlock { Get-EventLog -LogName System -Newest 5 } passes a single string with spaces, treated as one name. Invoke-Command -ComputerName Server01; Server02; Server03 -ScriptBlock { Get-EventLog -LogName System -Newest 5 } uses semicolons, which is invalid syntax.Final Answer:
Invoke-Command -ComputerName @('Server01', 'Server02', 'Server03') -ScriptBlock { Get-EventLog -LogName System -Newest 5 } -> Option AQuick Check:
Use array syntax @() for multiple computers [OK]
Hint: Use @() array for multiple computer names [OK]
Common Mistakes:
- Using space-separated names without commas or array syntax
- Passing all names as one string
- Using semicolons to separate names
