Test if powershell remoting is enabled
You can use the Test-WSMan cmdlet to check whether the WinRM service is running on a remote computer.
[bool](Test-WSMan -ComputerName 'ComputerName' -ErrorAction SilentlyContinue)
at the risk of being off-topic ...
function server_available?( $_server_to_act_on ) { if ( Test-Connection -ComputerName $_server_to_act_on -Count 1 -Quiet ) { Write-Host "`nTest-Connection: $_server_to_act_on OK" -NoNewline if ( [bool](Test-WSMan -ComputerName $_server_to_act_on -ErrorAction SilentlyContinue) ) { Write-Host ", Test-WSMan: $_server_to_act_on OK" -NoNewline if ( [bool](Invoke-Command -ComputerName $_server_to_act_on -ScriptBlock {"hello from $env:COMPUTERNAME"} -ErrorAction SilentlyContinue) ) { Write-Host ", Invoke-Command: $_server_to_act_on OK" -NoNewline return $true } } } return $false}
Working from Straffs code above, this is my working version of how to determine if PS Remoting is working on 1 or more machines. Save the code and put it in the same folder with a file named "PCList.txt" Run the script and it will display the status as each system in the list AND produce a new report each time you run it in .CSV format directly clickable into excel. Put one machine per line in the PCList.txt file. You must have local admin access to the remote machines for this to work, always "Run As Administrator"
function Test-CanRemoteSystetmRunPSCmd( $_server_to_act_on ) { Write-host "`n`n$Counter of $Total - Testing System:`t$_server_to_act_on`n" if ( Test-Connection -ComputerName $_server_to_act_on -Count 1 -Quiet ) { Write-Host "`nTest-Connection: $_server_to_act_on OK, " -NoNewline if ( [bool](Test-WSMan -ComputerName $_server_to_act_on -ErrorAction SilentlyContinue) ) { Write-Host "Test-WSMan: $_server_to_act_on OK, " -NoNewline if ( [bool](Invoke-Command -ComputerName $_server_to_act_on -ScriptBlock {"hello from $env:COMPUTERNAME"} -ErrorAction SilentlyContinue) ) { Write-Host "Invoke-Command: $_server_to_act_on OK. `n" return "$_server_to_act_on,SUCCESS" } Else { Return "$_server_to_act_on,FAILED Invoke-Command" Continue } } Else { Return "$_server_to_act_on,FAILED Test-WSMAN" Continue } } Else { Return "$_server_to_act_on,FAILED Test-Connection" Continue } }Clear-Host# Intialze the report name and header anchored in the current script folder $_NewRunTime = Get-Date # Initialize the time of the script being run$_LastRunTime = $_NewRunTime$_Year = $_NewRunTime.Year$_Month = $_NewRunTime.Month$_Day = $_NewRunTime.Day$_Hour = $_NewRunTime.Hour$_Min = $_NewRunTime.Minute$_Sec = $_NewRunTime.Second$_Report_DateTime_Header = "$_Year.$_Month.$_Day.$_Hour.$_Min.$_Sec"$_report_File = "$PSScriptRoot" + '\' + "$_Report_DateTime_Header" + '_PSRemotingStatusReport.csv'$_ReportHeader = "Computer Name,PS Remoting Status,Test Time" Out-File -FilePath $_report_File -InputObject $_ReportHeader -Encoding UTF8 # Add a line to the report$PCList = Get-Content -Path "$PSScriptRoot\PCList.txt"$Total = $PCList.Count$Counter = 0ForEach ($PC in $PCList){ $Counter = $Counter + 1 $T = Measure-Command {$RemoteCommandCheck = Test-CanRemoteSystetmRunPSCmd $PC} $TestTimeTotal = $T.Totalseconds If($RemoteCommandCheck -like "*Fail*") { Write-Host "$RemoteCommandCheck,$TestTimeTotal" -ForegroundColor Red -BackgroundColor Yellow } Else { Write-Host "$RemoteCommandCheck,$TestTimeTotal" -ForegroundColor White -BackgroundColor DarkGreen } $RemoteCommandCheck + ',' + $TestTimeTotal | Out-File -FilePath $_report_File -Encoding UTF8 -Append}