Windows Server 2025 / WinRMとPowerShellリモート処理で管理する

PowerShellリモート処理は、別のサーバーでコマンドを実行したり対話型シェルを開いたりする仕組みです。Windows Server 2025ではWinRMの応答だけでなく、認証と実行権限も確認します。

設定する場所を取り違えない

待ち受けの設定はFS1のコンソール、接続コマンドは管理PCで実行します。逆にすると不要な待ち受けを開いたり別のPCを調べたりします。この例はWindows PowerShellとWinRMを使い、PowerShell 7のSSH接続は扱いません。

FS1の管理者PowerShellで現状を確認します。すでに構成済みの場合は重ねて変更する必要はありません。

Get-Service WinRM
Get-PSSessionConfiguration
Test-WSMan localhost

必要な場合だけ対象側を有効にする

hostname
Enable-PSRemoting -Force
Test-WSMan localhost

名前が対象のFS1であることを確認して実行します。待ち受け、セッション、ファイアウォールに影響するため、管理PCや必要なサブネットに範囲を制限します。WinRMの既定はHTTPが5985、HTTPSが5986です。

HTTPという名称だけで認証済みメッセージが無保護とは判断できません。WinRMの認証とメッセージ保護を確認し、接続先の識別と資格情報の保護を設計します。

ドメインでは名前で接続する

PCとFS1が同じドメインに参加し、DNSと時刻が正常で、権限がある段階で実行します。ドメイン構築前に同じ成功を期待しないでください。

Test-WSMan -ComputerName 'fs1.ad.example.test'
Enter-PSSession -ComputerName 'fs1.ad.example.test'
hostname
whoami
Exit-PSSession

Enter-PSSession後のコマンドは接続先で実行され、Exit-PSSessionで管理PCへ戻ります。IP指定ではKerberosを利用する名前指定と認証条件が変わるため、正常なドメインDNSがある場合はFQDNを使います。

ワークグループの信頼範囲を限定する

IPやワークグループでの接続はHTTPSや限定したTrustedHostsなど追加条件があります。TrustedHosts自体は相手の身元を認証しません。運用では信頼された証明書によるHTTPSも検討します。リモート処理の障害対応を確認してください。

隔離実習ではFS1のコンソールでIPを照合し、管理PCで元の値を記録してその対象だけを追加します。アカウント名は実際の対象管理者へ置き換えます。

$previousHosts = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
$labTargets = (@($previousHosts -split ',') + '172.24.50.20' | Where-Object { $_ } | Sort-Object -Unique) -join ','
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $labTargets
$labCredential = Get-Credential -UserName 'FS1\Administrator'
Enter-PSSession -ComputerName '172.24.50.20' -Credential $labCredential
hostname
Exit-PSSession

同じ管理PCのセッションで、作業後に元の値へ戻します。

if ([string]::IsNullOrEmpty($previousHosts)) {
    Clear-Item WSMan:\localhost\Client\TrustedHosts
} else {
    Set-Item WSMan:\localhost\Client\TrustedHosts -Value $previousHosts
}

独自のローカル管理者ではリモートUACの制約もあります。保護機能を広く無効化するのではなく、認証設計を見直してください。

単発の問い合わせで結果を確認する

ドメインの前提を満たした後、次を管理PCから実行します。

Invoke-Command -ComputerName 'fs1.ad.example.test' -ScriptBlock {
    Get-CimInstance Win32_OperatingSystem | Select-Object Caption,Version,LastBootUpTime
}

PSComputerNameとOSを照合し、ローカルの結果と混同しないようにします。DNS、TCP、WinRM、認証、セッションの許可を順に切り分けます。Test-WSManが応答してもコマンド実行権限までは証明しません。待ち受けを戻す前は、WACなど別の管理ツールが使っていないか確認します。