PSRemoting is a powerful way to manage remote computers. I often use this. However on some server PSRemoting is not enabled. A custom function can help you. When you import this in a Powershell session you can manage the server that don’t have PSRemoting enabled. I assume that you only have Windows Server 2008 and above servers in you domain.
First import the module or copy-paste it in you shell.
function Test-PSRemoting { param( [Parameter(Mandatory = $true)] $RemoteComputer ) try { #Returns value 1 in a scriptblock on the remote computer $errorActionPreference = "Stop" $result = Invoke-Command -ComputerName $RemoteComputer {1} } catch { Write-Verbose $_ return $false } if($result -ne "1") { Write-Verbose "The remote computer: $RemoteComputer did not return the expected result. Please make sure you have enough privileges to connect to the computer." -f Red return $false } $true }
Then to use it you can use the following code:
Import-Module ActiveDirectory Import-Module ".\TestPSRemoting.psm1" -Force $Servers = Get-ADComputer -Filter * -Properties OperatingSystem | Where {$_.OperatingSystem -match "Server"} Write-host "There are " $Servers.count " servers found" $DomainUser = ($env:userdomain+"\"+$env:username) $secureString = Read-Host -AsSecureString "Enter your password" Foreach ($Server in $Servers){ $Result = $null $ServerName = $Server.Name $Result = Test-PSRemoting $Server If ($Result -eq $False){ Write-Host "PSRemoting will be enabled on server: $Server" $Date = (Get-Date).AddMinutes(30) schtasks /create /S $ServerName /RU $DomainUser /RP $secureString /SC Once /SD $date.ToString('dd"/"MM"/"yyy') /ST $date.ToString('HH":"mm') /TN "Enable PSRemoting" /TR "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe Enable-PSRemoting -Force" /F }}
You need to be an Administrator of course or at least have enough permission to enable psremoting. If PSremoting is disabled an task will be scheduled to enable it within 30 minutes. You can enable PSRemoting remotely using the script. If you want to enable PSremoting on all workstations you’ll need to change the definition to something else. For example use a part of the DestinguishedName if an OU is called Workstations for example.
Good luck!