Agent skill

remote-management

Manage remote Windows servers via WinRM, PowerShell remoting, and SSH. Use when user needs to execute commands on remote hosts or establish remote sessions.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/remote-management-djcyphers-network-copilot-cli

SKILL.md

Remote Server Management Skill

When to Activate

  • User mentions: remote, WinRM, PSRemoting, Enter-PSSession, Invoke-Command, SSH
  • User wants to run commands on another server
  • User needs to manage multiple servers at once

Prerequisites

Enable WinRM on Target

powershell
# On target server (run as admin)
Enable-PSRemoting -Force
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force  # Or specific hosts

Verify Connectivity

powershell
Test-WSMan -ComputerName $remoteHost
Test-NetConnection -ComputerName $remoteHost -Port 5985  # HTTP
Test-NetConnection -ComputerName $remoteHost -Port 5986  # HTTPS

Remote Execution Patterns

Single Command to Single Host

powershell
Invoke-Command -ComputerName $remoteHost -ScriptBlock {
    Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
}

Single Command to Multiple Hosts

powershell
$servers = @('Server01', 'Server02', 'Server03')
Invoke-Command -ComputerName $servers -ScriptBlock {
    [PSCustomObject]@{
        Host = $env:COMPUTERNAME
        Uptime = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
        FreeMemGB = [math]::Round((Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory / 1MB, 2)
    }
} | Select-Object Host, Uptime, FreeMemGB

Interactive Session

powershell
# Enter interactive session
Enter-PSSession -ComputerName $remoteHost

# Exit when done
Exit-PSSession

With Credentials

powershell
$cred = Get-Credential
Invoke-Command -ComputerName $remoteHost -Credential $cred -ScriptBlock { whoami }

# Or use stored credential
$cred = New-Object PSCredential("DOMAIN\User", (ConvertTo-SecureString "password" -AsPlainText -Force))

Pass Variables to Remote

powershell
$serviceName = "Spooler"
Invoke-Command -ComputerName $remoteHost -ScriptBlock {
    param($svc)
    Get-Service -Name $svc
} -ArgumentList $serviceName

# Or using $using: scope (PS 3.0+)
Invoke-Command -ComputerName $remoteHost -ScriptBlock {
    Get-Service -Name $using:serviceName
}

Copy Files to Remote

powershell
# Using PS remoting session
$session = New-PSSession -ComputerName $remoteHost
Copy-Item -Path "C:\local\file.txt" -Destination "C:\remote\" -ToSession $session
Remove-PSSession $session

SSH Alternative (OpenSSH)

Connect via SSH

powershell
ssh user@$remoteHost

# Run single command
ssh user@$remoteHost "Get-Process | Select -First 5"

PowerShell over SSH

powershell
# Requires OpenSSH and PowerShell subsystem configured
Enter-PSSession -HostName $remoteHost -UserName $username -SSHTransport

Parallel Execution (PS 7+)

powershell
$servers = @('Server01', 'Server02', 'Server03', 'Server04', 'Server05')

$servers | ForEach-Object -Parallel {
    Invoke-Command -ComputerName $_ -ScriptBlock {
        [PSCustomObject]@{
            Server = $env:COMPUTERNAME
            CPU = (Get-CimInstance Win32_Processor).LoadPercentage
        }
    }
} -ThrottleLimit 5

Troubleshooting WinRM

Error Solution
"WinRM cannot complete the operation" Enable WinRM: Enable-PSRemoting -Force
"Access denied" Check credentials, group membership
"The WinRM client cannot process the request" Add to TrustedHosts or use HTTPS
Connection timeout Check firewall (5985/5986), network path
powershell
# Diagnose WinRM issues
winrm quickconfig
winrm get winrm/config/client

Didn't find tool you were looking for?

Be as detailed as possible for better results