Built-In Remoting in PowerShell
Windows PowerShell v2 includes built-in remoting for many commands, using the -computername parameter.
( for a quick list of commands that support this parameter, but don't require full session support try this:
PS> get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
)
One of the advantages of this built-in remoting is that you don't need to have full WS-Man remoting enabled to use these commands, unlike using the PSSession commands. This means you can easily find out if the DNS Server service is running on a remote computer with:
PS> Get-Service DNS -computername <computername>
You can also use built-in remoting for things like Get-Process, but there's a catch. Get-Process requires that the RemoteRegistry service be running. So the following is expected:
PS> Get-Service RemoteRegistry -Computername Charlie-PC
Status Name DisplayName
------ ---- -----------
Stopped RemoteRegistry Remote Registry
PS> Get-Process PowerShell -Computername Charlie-PC
Get-Process : Couldn't connect to remote machine.
At line:1 char:12
- Get-Process <<<< PowerShell -Computername Charlie-PC
+ CategoryInfo : NotSpecified: (:) [Get-Process], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetProcessCommand
This is true even though I do have WS-Man functionality enabled on Charlie-PC, allowing me to do the following:
PS> $CharliePC = New-PSSession Charlie-PC
PS> Invoke-Command -Session $CharliePC -scriptblock { ps PowerShell }
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName PSComputerName
------- ------ ----- ----- ----- ------ -- ----------- --------------
768 31 54916 56072 600 1.51 1084 powershell charlie-pc
506 29 159344 149904 586 7.47 3612 powershell charlie-pc
536 34 47924 55068 588 1.84 5144 powershell charlie-pc