
windows-server
Administer Windows Server systems. Manage IIS, Active Directory, and PowerShell automation. Use when administering Windows infrastructure.
- Installs
- 451
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill windows-server- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads windows-server automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Windows Server Administration
Windows Server management and PowerShell automation for production workloads including IIS web hosting, Active Directory domain services, and system maintenance.
When to Use
- Provisioning or configuring Windows Server 2019/2022 instances
- Setting up IIS websites, application pools, and bindings
- Managing Active Directory users, groups, and Group Policy
- Automating administrative tasks with PowerShell
- Reviewing Windows Event Logs for troubleshooting
- Applying and managing Windows Updates on servers
Prerequisites
- Administrator account on the target server
- PowerShell 5.1+ (built-in) or PowerShell 7+ installed
- Remote Desktop or WinRM access configured
- Windows Server 2019 or 2022 (Desktop Experience or Server Core)
PowerShell Administration Essentials
# Check PowerShell version
$PSVersionTable.PSVersion
# Get system information
Get-ComputerInfo | Select-Object CsName, OsName, OsVersion, OsArchitecture
# List running processes sorted by CPU
Get-Process | Sort-Object CPU -Descending | Select-Object -First 20
# List all services and their status
Get-Service | Where-Object { $_.Status -eq 'Running' }
# Restart a service
Restart-Service -Name W3SVC -Force
# Get disk space on all drives
Get-PSDrive -PSProvider FileSystem | Select-Object Name, @{N='Used(GB)';E={[math]::Round($_.Used/1GB,2)}}, @{N='Free(GB)';E={[math]::Round($_.Free/1GB,2)}}
# Check uptime
(Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
# Open firewall port
New-NetFirewallRule -DisplayName "Allow HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
# List firewall rules
Get-NetFirewallRule | Where-Object { $_.Enabled -eq 'True' -and $_.Direction -eq 'Inbound' } | Select-Object DisplayName, Action
# Set DNS client server addresses
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses ("10.0.0.2","10.0.0.3")
# PowerShell remoting to another server
Enter-PSSession -ComputerName server02 -Credential (Get-Credential)
# Run a command on multiple remote servers
Invoke-Command -ComputerName server01,server02,server03 -ScriptBlock { Get-Service W3SVC }
Server Roles and Features
# List all available roles and features
Get-WindowsFeature
# Install IIS with management tools
Install-WindowsFeature -Name Web-Server -IncludeManagementTools -IncludeAllSubFeature
# Install Active Directory Domain Services
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
# Install DNS Server
Install-WindowsFeature -Name DNS -IncludeManagementTools
# Install DHCP Server
Install-WindowsFeature -Name DHCP -IncludeManagementTools
# Install File Server with deduplication
Install-WindowsFeature -Name FS-FileServer, FS-Data-Deduplication
# List installed features only
Get-WindowsFeature | Where-Object Installed | Select-Object Name, InstallState
# Remove a feature
Uninstall-WindowsFeature -Name Telnet-Client
IIS Web Server Setup
# Import the IIS administration module
Import-Module WebAdministration
# Create a new application pool
New-WebAppPool -Name "ProductionPool"
Set-ItemProperty IIS:\AppPools\ProductionPool -Name processModel.identityType -Value 3 # NetworkService
Set-ItemProperty IIS:\AppPools\ProductionPool -Name managedRuntimeVersion -Value "" # No managed code (reverse proxy)
# Create a new website
New-Website -Name "MyApp" `
-Port 443 `
-Protocol https `
-PhysicalPath "C:\inetpub\myapp" `
-ApplicationPool "ProductionPool" `
-SslFlags 1
# Add an HTTP binding that redirects to HTTPS
New-WebBinding -Name "MyApp" -Protocol http -Port 80
# Bind an SSL certificate to the HTTPS site
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -like "*example.com*" }
New-Item IIS:\SslBindings\0.0.0.0!443 -Value $cert
# Create a virtual directory
New-WebVirtualDirectory -Site "MyApp" -Name "static" -PhysicalPath "C:\inetpub\static"
# Start, stop, and restart a site
Start-Website -Name "MyApp"
Stop-Website -Name "MyApp"
Restart-WebAppPool -Name "ProductionPool"
# List all websites and their state
Get-Website | Select-Object Name, State, PhysicalPath, @{N='Bindings';E={$_.Bindings.Collection.bindingInformation}}
# Enable IIS logging with W3C format
Set-WebConfigurationProperty -PSPath "IIS:\Sites\MyApp" `
-Filter "system.webServer/httpLogging" `
-Name "dontLog" -Value $false
# URL Rewrite: redirect HTTP to HTTPS (requires URL Rewrite module)
# web.config rule:
@'
<rule name="HTTP to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
'@
Active Directory Basics
# Promote server to a new domain controller in a new forest
Install-ADDSForest `
-DomainName "corp.example.com" `
-DomainNetBIOSName "CORP" `
-InstallDns:$true `
-SafeModeAdministratorPassword (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) `
-Force:$true
# Create an Organizational Unit
New-ADOrganizationalUnit -Name "Engineering" -Path "DC=corp,DC=example,DC=com"
# Create a new AD user
New-ADUser -Name "Jane Smith" `
-SamAccountName "jsmith" `
-UserPrincipalName "jsmith@corp.example.com" `
-Path "OU=Engineering,DC=corp,DC=example,DC=com" `
-AccountPassword (ConvertTo-SecureString "TempP@ss1" -AsPlainText -Force) `
-Enabled $true `
-ChangePasswordAtLogon $true
# Add user to a group
Add-ADGroupMember -Identity "Domain Admins" -Members "jsmith"
# Search for users in an OU
Get-ADUser -Filter * -SearchBase "OU=Engineering,DC=corp,DC=example,DC=com" | Select-Object Name, SamAccountName, Enabled
# Disable a user account
Disable-ADAccount -Identity "jsmith"
# Unlock a locked-out account
Unlock-ADAccount -Identity "jsmith"
# Reset a user password
Set-ADAccountPassword -Identity "jsmith" -Reset -NewPassword (ConvertTo-SecureString "NewP@ss1" -AsPlainText -Force)
# List all domain controllers
Get-ADDomainController -Filter * | Select-Object Name, IPv4Address, Site
# Check AD replication status
Get-ADReplicationPartnerMetadata -Target "dc01.corp.example.com"
repadmin /replsummary
Windows Update Management
# Install the PSWindowsUpdate module (from PowerShell Gallery)
Install-Module -Name PSWindowsUpdate -Force
# Check for available updates
Get-WindowsUpdate
# Install all available updates (auto-reboot if needed)
Install-WindowsUpdate -AcceptAll -AutoReboot
# Install only critical and security updates
Install-WindowsUpdate -Category "Security Updates","Critical Updates" -AcceptAll
# View update history
Get-WUHistory | Select-Object -First 20 Title, Date, Result
# Schedule monthly patching via Task Scheduler
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NoProfile -Command Install-WindowsUpdate -AcceptAll -AutoReboot"
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 2am
Register-ScheduledTask -TaskName "MonthlyPatching" -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest
# WSUS configuration via Group Policy (registry keys)
# HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
# WUServer = http://wsus.corp.example.com:8530
# WUStatusServer = http://wsus.corp.example.com:8530
Event Log Analysis
# View the 50 most recent System log errors
Get-EventLog -LogName System -EntryType Error -Newest 50
# Search for specific event IDs (e.g., unexpected shutdowns = 6008)
Get-EventLog -LogName System -InstanceId 6008
# Use Get-WinEvent for advanced filtering (newer cmdlet)
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
Level = 2 # Error
StartTime = (Get-Date).AddDays(-1)
} | Select-Object TimeCreated, Id, Message -First 20
# Search Security log for failed logons (Event ID 4625)
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
} | Select-Object TimeCreated, @{N='Account';E={$_.Properties[5].Value}}, @{N='Source';E={$_.Properties[19].Value}} -First 30
# Export events to CSV for analysis
Get-WinEvent -FilterHashtable @{ LogName='System'; Level=1,2 } |
Export-Csv -Path C:\Logs\system-errors.csv -NoTypeInformation
# Clear old event log entries (use cautiously)
Clear-EventLog -LogName Application
# Set maximum log size
Limit-EventLog -LogName Application -MaximumSize 512MB -OverflowAction OverwriteAsNeeded
Scheduled Tasks
# Create a scheduled task to run a script daily at 3 AM
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NoProfile -File C:\Scripts\daily-maintenance.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -DontStopOnIdleEnd
Register-ScheduledTask -TaskName "DailyMaintenance" -Action $action -Trigger $trigger -Settings $settings -User "SYSTEM"
# List all scheduled tasks
Get-ScheduledTask | Where-Object { $_.State -ne 'Disabled' } | Select-Object TaskName, State, TaskPath
# Run a task immediately
Start-ScheduledTask -TaskName "DailyMaintenance"
# Disable and remove a task
Disable-ScheduledTask -TaskName "DailyMaintenance"
Unregister-ScheduledTask -TaskName "DailyMaintenance" -Confirm:$false
Troubleshooting
| Symptom | Diagnostic Command | Common Fix |
|---|---|---|
| IIS site returns 503 | Get-WebAppPoolState | Restart the application pool; check Event Log for crash |
| High CPU on server | Get-Process | Sort CPU -Desc | Identify process; check for runaway w3wp or service |
| Disk running low | Get-PSDrive -PSProvider FileSystem | Clear temp files, IIS logs, Windows Update cache |
| AD account locked out | Search-ADAccount -LockedOut | Unlock-ADAccount; find lockout source in Security log |
| Windows Update fails | Get-WindowsUpdate -Verbose | Run sfc /scannow, reset update components |
| Service fails to start | Get-EventLog -LogName System -Newest 20 | Check dependencies, credentials, and port conflicts |
| RDP connection refused | Get-ItemProperty 'HKLM:\System\...\Terminal Server' | Ensure RDP is enabled and firewall allows port 3389 |
| DNS resolution fails | Resolve-DnsName example.com | Check DNS server settings and forwarder config |
Related Skills
linux-administration-- Cross-platform comparison and hybrid managementssh-configuration-- SSH access for Windows OpenSSH Serveruser-management-- Parallel concepts for Linux user/group managementsystemd-services-- Linux equivalent of Windows Services and Task Schedulerperformance-tuning-- Performance monitoring and optimization patterns
FAQ
What does the windows-server skill do?
Administer Windows Server systems. Manage IIS, Active Directory, and PowerShell automation. Use when administering Windows infrastructure.
How do I install windows-server?
Run npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill windows-server in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/windows-server/ (personal) or .claude/skills/windows-server/ (project).
Which AI agents can use windows-server?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is windows-server safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains windows-server?
It is published by bagelhole in bagelhole/devops-security-agent-skills. It has 451 recorded installs.
More from bagelhole/devops-security-agent-skills
linux-hardening
bagelhole/devops-security-agent-skills
Apply CIS benchmarks and secure Linux servers. Configure SSH, manage users, implement firewall rules, and enable security features. Use when hardening Linux systems for production or meeting security compliance requirements.
linux-administration
bagelhole/devops-security-agent-skills
System administration for Linux servers. Manage packages, services, and system configuration. Use when administering Linux systems.
docker-compose
bagelhole/devops-security-agent-skills
Define and run multi-container Docker applications using Docker Compose. Create compose files, manage service dependencies, configure networks and volumes, and orchestrate local development environments. Use when setting up multi-service applications or development environments.
docker-management
bagelhole/devops-security-agent-skills
Build, optimize, and troubleshoot Docker containers and images. Create efficient Dockerfiles, manage container lifecycle, configure networking and volumes, and debug container issues. Use when working with Docker, containerization, or container troubleshooting.
systemd-services
bagelhole/devops-security-agent-skills
Create and manage systemd services and timers. Configure service dependencies and resource limits. Use when managing system services.
reverse-proxy
bagelhole/devops-security-agent-skills
Configure nginx and Traefik as reverse proxies. Implement SSL termination and routing. Use when setting up application gateways.
Popular backend & apis skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.