Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

【Windows】CMD・PowerShell・GPOでタイムゾーンを変更する完全ガイド

タイムゾーンは、日付や時刻と並んでコンピューターにとって重要な設定項目の一つです。Windowsや各種アプリケーションを正しく動作させるためには、コンピューターが設置されている地理的な場所に応じたタイムゾーンを設定しておく必要があります。本記事では、Windowsにおけるタイムゾーンの変更方法について、GUI、コマンドプロンプト(CMD)、PowerShell、そしてグループポリシー(GPO)を使う方法を詳しく解説します。

GUIからタイムゾーンを変更する方法(Windows 10 / Windows Server 2019/2016)

Windows 10およびWindows Server 2019/2016では、新しい「設定」アプリを使用して日付とタイムゾーンを設定します。タスクトレイの時計アイコンを右クリックし、「日付と時刻の調整」を選択することでGUIから設定できます。デフォルトでは「タイムゾーンを自動的に設定する」オプションが有効になっており、Windowsが自動的にタイムゾーンを選択しようとします。このオプションをオフにすると、ドロップダウンリストから任意のタイムゾーンを手動で選択できるようになります。

ヒント: 従来の「日付と時刻」コントロールパネルアプレットを使用してタイムゾーン設定を変更することも可能です。その場合は、timedate.cpl コマンドを実行してください。

ユーザーによるタイムゾーン変更の許可/制限

デフォルトでは、ユーザーは管理者権限がなくてもタイムゾーンを変更できます(日付や時刻の変更とは異なります)。この動作は「ローカルセキュリティポリシー」コンソール(secpol.msc)から変更可能です。「セキュリティの設定 → ローカルポリシー → ユーザー権利の割り当て」へ移動し、「タイムゾーンの変更」というポリシーを探します。初期状態では、システム、Administrators、Users のすべてがタイムゾーンを変更できます。ユーザーによる変更を禁止したい場合は、このポリシーのアカウント一覧から「Users」グループを削除してください。

Windows Serverでは、Local Serviceと管理者のみがタイムゾーンを変更する権限を持っています。また、Hyper-V ServerやWindows Server Coreでは、内蔵の sconfig ユーティリティを使用してタイムゾーンを設定できます。

TZUtil.exe:コマンドプロンプト(CMD)でタイムゾーンを変更する方法

Windows 11/10/8.1およびWindows Server 2019/2016/2012 R2でタイムゾーンを変更するには、専用のコマンドラインツール tzutil.exe(Windows Time Zone Utility)を使用します。このツールはWindows 7で初めて登場し、実行ファイルは %WINDIR%\System32 フォルダーに格納されています。

現在のタイムゾーンを確認する

コマンドプロンプト(cmd.exe)を起動し、現在のタイムゾーンとその識別子(TimeZoneID)を確認するには、次のコマンドを実行します。

tzutil /g

この例では、Pacific Standard Time が現在のタイムゾーン識別子です。

利用可能なタイムゾーンの一覧を表示する

すべての利用可能なタイムゾーンの一覧は、次のコマンドで表示できます。

tzutil /l

TimeZone Id | TimeZone DisplayName
Dateline Standard Time | (UTC-12:00) International Date Line West
UTC-11 | (UTC-11:00) Coordinated Universal Time-11
Hawaiian Standard Time | (UTC-10:00) Hawaii
Alaskan Standard Time | (UTC-09:00) Alaska
Pacific Standard Time | (UTC-08:00) Pacific Time (US & Canada)
Mountain Standard Time | (UTC-07:00) Mountain Time (US & Canada)
Central Standard Time | (UTC-06:00) Central Time (US & Canada)
Eastern Standard Time | (UTC-05:00) Eastern Time (US & Canada)
GMT Standard Time | (UTC+00:00) Dublin, Edinburgh, Lisbon, London
W. Europe Standard Time | (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
GTB Standard Time | (UTC+02:00) Athens, Bucharest
Russian Standard Time | (UTC+03:00) Moscow, St. Petersburg, Volgograd
India Standard Time | (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi
SE Asia Standard Time | (UTC+07:00) Bangkok, Hanoi, Jakarta
China Standard Time | (UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi
Tokyo Standard Time | (UTC+09:00) Osaka, Sapporo, Tokyo
Korea Standard Time | (UTC+09:00) Seoul
AUS Eastern Standard Time | (UTC+10:00) Canberra, Melbourne, Sydney
New Zealand Standard Time | (UTC+12:00) Auckland, Wellington

※上記は主要なタイムゾーンのみを抜粋したものです。Windowsの最新のタイムゾーン一覧については、Microsoft公式ドキュメントをご参照ください:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones

特定のUTCオフセット(例:UTC-06)を持つタイムゾーンを素早く検索するには、次のようにfindコマンドと組み合わせます。

tzutil /l | find /I "utc-06"

タイムゾーンを変更する

現在のタイムゾーンを「(UTC-05:00) 東部標準時(米国・カナダ)」に変更する例:

tzutil /s "Eastern Standard Time"

タイムゾーン情報はWindowsレジストリに保存されています。変更が反映されたかどうかは、次のコマンドで確認できます。

reg query HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

夏時間(DST)を無効にする方法

特定のタイムゾーンで夏時間を無効にする場合は、タイムゾーン識別子に _dstoff サフィックスを付けて指定します。

tzutil /s "Central European Standard Time_dstoff"

このコマンドを実行すると、タイムゾーンが変更され、季節ごとの時計の自動調整が無効になります。

タイムゾーンおよび夏時間設定の詳細情報を表示するには、次のコマンドを使用します。

w32tm /tz

Time zone: Current:TIME_ZONE_ID_UNKNOWN Bias: 480min (UTC=LocalTime+Bias)
[Standard Name:"Pacific Standard Time" Bias:0min Date:(unspecified)]
[Daylight Name:"Pacific Standard Time" Bias:0min Date:(unspecified)]

なお、Windows XPやWindows Server 2003でコマンドプロンプトからタイムゾーンを変更するには、以下のようなコマンドを使用する必要がありました。

RunDLL32.exe shell32.dll,Control_RunDLL timedate.cpl,,/Z Central America Standard Time

または:

Control.exe TIMEDATE.CPL,,/Z Central America Standard Time

PowerShellでタイムゾーンを設定する方法

PowerShellコンソールからも現在のタイムゾーン設定を取得できます。次のコマンドを実行してください。

[TimeZoneInfo]::Local

または

Get-TimeZone

Id                         : Pacific Standard Time
DisplayName                : (UTC-08:00) Pacific Time (US & Canada)
StandardName               : Pacific Standard Time
DaylightName               : Pacific Standard Time
BaseUtcOffset              : -08:00:00
SupportsDaylightSavingTime : False

Windowsで利用可能なすべてのタイムゾーンを表示するには、次のいずれかのコマンドを使用します。

[System.TimeZoneInfo]::GetSystemTimeZones()

または

Get-TimeZone -ListAvailable

タイムゾーンの一覧は非常に長いため、必要なタイムゾーン名を探す際はPowerShellのフィルタリング機能を使うと便利です。

Get-TimeZone -ListAvailable | Where-Object {$_.displayname -like "*canada*"}

または:

Get-TimeZone -ListAvailable | Where-Object {$_.Id -like "*euro*"}

すべてのタイムゾーンをアルファベット順に一覧表示することもできます。

Get-TimeZone -ListAvailable | Select Id | Sort Id

PowerShellから現在のタイムゾーンを変更するには、次のコマンドを実行します。

Set-TimeZone -Name "US Eastern Standard Time"

※これらの例はPowerShell 5.1で動作確認していますが、それ以降のバージョンでも同様に機能します。

グループポリシー(GPO)でタイムゾーンを構成する方法

Active Directoryドメイン環境では、グループポリシーを使用してドメイン内のコンピューターのタイムゾーンを一括設定できます。GPOにはタイムゾーン設定用の組み込みパラメーターが存在しないため、一般的には「GPOログオンスクリプトを使用する方法」と「レジストリ設定をインポートする方法」の2つが使われます。

方法1:GPOログオンスクリプトを使用する

GPOのログオンスクリプトでタイムゾーンを設定するには、次のようなシンプルなPowerShellスクリプトが利用できます(Windows XPおよびWindows Server 2003以降のすべてのバージョンで動作)。

$timeZone = "Central Europe Daylight Time"
$WinOSVerReg = Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$WinOSVer = $WinOSVerReg.GetValue("CurrentVersion")
if ($WinOSVer -GE 6){
    tzutil.exe /s $timeZone
} Else {
    $params = "/c Start `"Change timeZone`" /MIN %WINDIR%\System32\Control.exe TIMEDATE.CPL,,/Z "
    $params += $timeZone
    $proc = [System.Diagnostics.Process]::Start( "CMD.exe", $params )
}

方法2:レジストリ設定をGPO経由でインポートする

もう一つの方法として、タイムゾーンが正しく設定された基準コンピューターの HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation レジストリキーの内容を、GPO経由で他のコンピューターに配布する方法があります。

レジストリブラウザーを使用してこのキーとすべてのパラメーターを選択すると、タイムゾーン設定全体がGPOエディター(「コンピューターの構成 → 基本設定 → Windowsの設定 → レジストリ」)にインポートされます。

Active Directoryサイトごとに異なるタイムゾーン設定を適用したい場合は、GPPのアイテムレベルのターゲット設定を使用して、特定のADサイトに対象を絞ることができます。

RDS環境に関する補足: リモートデスクトップサービス(RDS)インフラストラクチャを利用していて、ユーザーとRDSHサーバーのタイムゾーンが異なる場合、ユーザーのRDPセッションにはサーバー側の時刻が表示されてしまいます。これを避けるには、GPOの「タイムゾーンのリダイレクトを許可する」(Allow time zone redirection)パラメーターを使用して、ユーザーのローカルタイムゾーンをRDPセッションにリダイレクトします。設定場所は「コンピューターの構成 → ポリシー → 管理用テンプレート → Windowsコンポーネント → リモートデスクトップサービス → リモートデスクトップセッションホスト → デバイスとリソースのリダイレクト」です。

Windows Server 2019 / Windows 10でタイムゾーンを変更できない:「アクセス許可がありません」エラーの対処法

Windows Server 2019 RTMおよび一部のWindows 10ビルドには、GUI経由でのタイムゾーン設定に関する厄介な不具合が存在します。最新の「設定」アプリや従来のコントロールパネルアプレットからタイムゾーンを変更しようとすると、次のエラーが表示されることがあります。

日付と時刻
続行できません。
このタスクを実行するためのアクセス許可がありません。
コンピューターの管理者に問い合わせてください。

まず、管理者権限を持つアカウントでWindowsにログオンしていること、および「タイムゾーンの変更」ローカルセキュリティポリシーの設定に「Administrators」グループが含まれていることを確認してください。

回避策として、この場合はコマンドラインからタイムゾーンを変更します。

tzutil /l
tzutil /s "Central Europe Standard Time"

またはPowerShellの場合:

Get-TimeZone -ListAvailable | ? DisplayName -like "*Berlin*" | Set-TimeZone

GUIからタイムゾーン設定を変更したい場合は、昇格された(管理者として実行した)コマンドプロンプトから timedate.cpl アプレットを起動するか、サーバーマネージャーから開きます(ローカルサーバー → タイムゾーン)。

補足: Exchange(Microsoft 365)メールボックスのタイムゾーンは、初回接続時にWindowsユーザープロファイルの設定に基づいて決定されます。

  1. Windows 10で日付と時刻を変更する4つの方法【初心者向け完全ガイド】

    Windows 10をアップデートした直後や、他のOSからアップグレードしたばかりの頃は、システムの時刻がわずかにずれて表示されることがあります。その場合は、日付と時刻の設定を見直す必要があります。幸い、Windows 10には日付と時刻を変更する方法が複数用意されており、「コントロールパネル」や「設定」アプリから簡単に調整できます。ただし、これらの設定を変更するには管理者権限でのサインインが必要です。 この記事では、Windows 10で日付と時刻を変更できる4つの方法を、初心者の方にもわかるように手順ごとに詳しく解説します。 Windows 10で日付と時刻を変更する4つの方法 作業を始め

  2. Windows 10でユーザーによる日付と時刻の変更を許可・禁止する方法

    Windows 10では、ユーザーは自分のニーズに合わせて日付と時刻を自由にカスタマイズできます。しかし、環境によっては管理者がこの権限を無効化し、ユーザーが日付や時刻を勝手に変更できないようにしたいケースがあります。 例えば、数千台のPCを管理する企業では、セキュリティ上のトラブルを防ぐため、管理者がユーザーによる日付と時刻の変更を制限するのが合理的です。誤ったシステム時刻は、証明書の検証エラーやログ管理の混乱など、さまざまな問題を引き起こす可能性があります。 デフォルトの設定では、すべての管理者アカウントはWindows 10で日付と時刻を変更できますが、標準ユーザーにはその権限がありま