remote-management

djcyphers's avatarfrom djcyphers

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

⭐0stars🔀0forks📁View on GitHub🕐Updated Dec 21, 2025

When & Why to Use This Skill

The Remote Server Management skill enables Claude to perform advanced administrative tasks on remote Windows environments using WinRM, PowerShell Remoting, and SSH. It streamlines IT operations by allowing the agent to execute remote commands, manage multiple server instances in parallel, and handle secure file transfers, effectively acting as an automated interface for system administration and infrastructure maintenance.

Use Cases

  • Fleet-wide System Monitoring: Execute parallel scripts across multiple servers to aggregate real-time performance metrics like CPU load, disk space, and service status.
  • Remote Incident Response: Quickly diagnose and fix server-side issues by running diagnostic commands or entering interactive sessions to restart services and clear logs.
  • Automated Deployment and Configuration: Distribute configuration files and execute setup scripts on remote hosts to ensure environment consistency without manual intervention.
  • Secure Remote Administration: Manage Windows servers securely using credential-based authentication and encrypted protocols (WinRM/SSH) for routine maintenance tasks.
nameremote-management
description"Manage remote Windows servers via WinRM, PowerShell remoting, and SSH. Use when user needs to execute commands on remote hosts or establish remote sessions."
licenseMIT

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

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

Verify Connectivity

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

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

Single Command to Multiple Hosts

$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

# Enter interactive session
Enter-PSSession -ComputerName $remoteHost

# Exit when done
Exit-PSSession

With Credentials

$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

$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

# 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

ssh user@$remoteHost

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

PowerShell over SSH

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

Parallel Execution (PS 7+)

$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
# Diagnose WinRM issues
winrm quickconfig
winrm get winrm/config/client