mcpField
W
windows-server

windows-server

github.com/bagelholeクラウド・DevOps1.2k453 回インストール23 週間前に更新
リポジトリ

windows-server について

本番ワークロードの設定と自動化を行う管理者向けの Windows Server 管理スキルです。IIS、Active Directory、PowerShell、イベントログ、更新管理を扱います。

主な機能

  1. 01PowerShell によるサーバー管理
  2. 02IIS サイトとアプリケーションプールの設定
  3. 03Active Directory のユーザーとグループの管理
  4. 04Windows イベントログの確認
  5. 05Windows 更新とスケジュールタスクの管理

活用シーン

  1. 01Windows Server 2019/2022 の設定
  2. 02IIS サイトとアプリケーションプールの配備
  3. 03ドメインサービス、ユーザー、グループポリシーの管理
  4. 04イベントログや更新の問題調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill windows-server

インストール後、Claude Code で/windows-serverを入力して読み込まれたか確認します。

詳細

Windows Server の管理

IIS Web ホスティング、Active Directory ドメインサービス、システムメンテナンスなど、本番ワークロード向けの Windows Server 管理と PowerShell 自動化です。

使用する場面

  • Windows Server 2019/2022 インスタンスのプロビジョニングや構成
  • IIS Web サイト、アプリケーションプール、バインドの設定
  • Active Directory のユーザー、グループ、グループポリシーの管理
  • PowerShell による管理タスクの自動化
  • トラブルシューティングのための Windows イベントログの確認
  • サーバーへの Windows 更新プログラムの適用と管理

前提条件

  • 対象サーバーの管理者アカウント
  • PowerShell 5.1+(組み込み)または PowerShell 7+ のインストール
  • リモートデスクトップまたは WinRM アクセスの構成
  • Windows Server 2019 または 2022(デスクトップ エクスペリエンスまたは Server Core)

PowerShell 管理の基本

# 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 }

サーバーの役割と機能

# 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 サーバーのセットアップ

# 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 の基本

# 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 "[email protected]" `
  -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 更新プログラムの管理

# 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

イベントログの分析

# 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

スケジュールされたタスク

# 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

トラブルシューティング

症状診断コマンド一般的な対処法
IIS サイトが 503 を返すGet-WebAppPoolStateアプリケーションプールを再起動し、イベントログでクラッシュを確認します
サーバーの CPU 使用率が高いGet-Process | Sort CPU -Descプロセスを特定し、w3wp またはサービスの暴走がないか確認します
ディスクの空き容量が少ないGet-PSDrive -PSProvider FileSystem一時ファイル、IIS ログ、Windows Update キャッシュを削除します
AD アカウントがロックアウトされるSearch-ADAccount -LockedOutUnlock-ADAccount を実行し、セキュリティログでロックアウトの発生元を確認します
Windows Update が失敗するGet-WindowsUpdate -Verbosesfc /scannow を実行し、更新コンポーネントをリセットします
サービスの起動に失敗するGet-EventLog -LogName System -Newest 20依存関係、資格情報、ポートの競合を確認します
RDP 接続が拒否されるGet-ItemProperty 'HKLM:\System\...\Terminal Server'RDP が有効であり、ファイアウォールでポート 3389 が許可されていることを確認します
DNS 名前解決に失敗するResolve-DnsName example.comDNS サーバーの設定とフォワーダーの構成を確認します

関連スキル

  • linux-administration -- クロスプラットフォームの比較とハイブリッド管理
  • ssh-configuration -- Windows OpenSSH Server の SSH アクセス
  • user-management -- Linux のユーザー/グループ管理に対応する概念
  • systemd-services -- Windows サービスおよびタスク スケジューラに相当する Linux の機能
  • performance-tuning -- パフォーマンスの監視と最適化の手法

コメント