【Set-Date】PowerShellでシステム日付・システム時間を設定する方法

こんにちは。チェシャ男です。(-皿-)

今回は、

【PowerShell でシステムの日時を設定する方法】

についてご紹介します。

今回紹介する ”Set-Date” コマンドレットではマシンのシステム日時を設定・変更することができます。

サマータイムのために「1時間戻す」時や、久しぶりに起動して日付が合っていないPCで「日付を変更する」時などに役立ちますね。

Set-Date” コマンドレットではシステムに変更を加えるため管理者モードで実施する必要があります。

システム日時を取得する方法はこちら↓の記事をご参考ください。

[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/system-service/get-date/”]

 

Set-Date でシステム日時を変更する

日付/時刻を設定するコマンドレットに

Set-Date

というものがあります。

【コマンドレット】

Set-Date

【オプション】

-Date <日付時刻データ>
-DisplayHint <表示タイプ>
-Adjust <タイムスパン>
-Confirm
-Watif

【入力】

System.DateTime
System.TimeSpan

【出力】

System.DateTime

【エイリアス】

なし

管理者として実行するにはスタートメニューから PowerShell を[管理者として実行する]から起動します。

管理者として実行-チェシャわら

上図のように PowerShell を、[管理者として実行]から起動します。

起動した PowerShell 画面に、「管理者」と記載があれば管理者として起動が成功しました。(※下図参照)

管理者実行のPowershell-チェシャわら

“-Date” オプションで日時を設定する

-Date” オプションで日時を指定して変更する場合は、”/ スラッシュ)や”:” (コロン)を使用して変更する日時/時刻を指定します。

例えば、

2016 年 1 月 23 日 午前 4 時 56 分

と設定したい場合は、

2016/1/23 4:56 AM

または

1/23/2016 4:56 AM

などと指定することで設定が可能です。実際に時刻を変更してみます

※時刻を強制的に変更するとソフトウェア等に影響が出る可能性があるためご注意ください

PS C:\work> #日時を変更する
PS C:\work> Set-Date -Date "2016/1/23 4:56 AM"

2016年1月23日 4:56:00


PS C:\work> Get-Date

2016年1月23日 4:56:06

Get-Date で確認しているように「2016年1月23日 4:56:00」に変更されていることがわかります。

Get-Date コマンドレットと組み合わせて日時を設定する

上にも書いたように” Set-Date” コマンドレットはインプットとして「System.DateTime」を渡すことで時刻を設定しています。

任意の「System.DateTime」型のデータを取得するにはGet-Dateコマンドレットを使用すればいいようです。

”-Date” オプション内で Get-Date コマンドレットを使ってみましょう。

PS C:\work> # System.DateTimeで変更する日時を指定
PS C:\work> Set-Date -Date (Get-Date -Year 2016 -Month 1 -Day 23 -Hour 4 -Minute 56)

2016年1月23日 4:56:11


PS C:\work> Get-Date

2016年1月23日 4:56:14

このように Get-Date コマンドレットSet-Date コマンドレットを組み合わせることで日付や時刻を変更することもできます。

何度も言いますが Set-Date コマンドレットで設定する日時は「System.DateTime」型でなければいけないので

  • 「年」だけ変えたい
  • 「月」だけ変えたい
  • 「時」だけ変えたい

といった場合には Get-Date コマンドレットを使用する方が楽なようですね。

例えば、

「年」だけ変更したい

⇒ Get-Date -Year <変更したい年>

「月」だけ変更したい

⇒ Get-Date -Mounth <変更したい月>

「時」だけ変更したい

⇒ Get-Date -Hour <変更したい時>

という風に Get-Date コマンドレットを使って、”Set-Date” コマンドレットの “-Date” オプション内に指定します。

以下に実行例を載せておきます。

PS C:\work> #年だけ変更する
PS C:\work> Set-Date -Date (Get-Date -Year 2015)

2015年11月20日 13:25:22

PS C:\work> #月だけ変更する
PS C:\work> Set-Date -Date (Get-Date -Month 1)

2016年1月20日 13:26:03


PS C:\work> #時だけ変更する
PS C:\work> Set-Date -Date (Get-Date -Hour 1)

2016年11月20日  1:26:03

”-Adjust” オプションで時刻を調整する

時刻を調整するには ”-Adjust” オプションを使用します。

この「調整」とは、

・時(Hour)を1時間進める

・分(Minute)を10分だけ戻す

といったように現在のシステムの時間から「○○進める」「○○戻す」といった操作を行うことを指します。

時計の時刻調整のツマミを回すようなものをイメージすればわかるでしょうか。

調整方法は、

  • 時間を進める場合は”+ (プラス)
  • 時間を戻す場合は”– (マイナス)

を指定して、時間 : 分 : 秒 を設定します。

1時間30分時間を進める

⇒ -Adjust 1:30:00

10分30秒時間を戻す

⇒ -Adjust -0:10:30

この時 ”-Adjust” オプションには「System.TimeSpan」型で時間調整内容が渡されています。

実際に実行してみると、

PS C:\work> #現在時刻
PS C:\work> Get-Date

2016年11月20日 13:51:08

PS C:\work> #1時間30分時間を進める
PS C:\work> Set-Date -Adjust 1:30:00

2016年11月20日 15:20:21

PS C:\work> #10分30秒時間を戻す
PS C:\work> Set-Date -Adjust -0:10:30

2016年11月20日 13:40:36

のようになります。

ちなみに調整範囲を「○:○:○:○」と指定した場合は「日(Day):時(Hour):分(Minute):秒(Srcond)」に変換されるので日~秒がまとめて調整されます。

また「時(Hour)」については”0~23”だけ受け付けるようで「24以上(または-24以下)」を指定した場合「日(Day)」と判定されてしまうようです。

PS C:\work> #現在時刻
PS C:\work> Get-Date

2016年11月20日 14:11:56

PS C:\work>
PS C:\work> #○:○:○:○で指定
PS C:\work> Set-Date -Adjust 1:00:00:00

2016年11月21日 14:12:38

PS C:\work>
PS C:\work> #時に24以上を指定
PS C:\work> Set-Date -Adjust 25:00:00

2016年12月15日 14:13:29

Get-Date のメソッドで日付と時刻を調整する

-Adjust” オプションを使用した日時の修正は説明しましたが少々使いにくいかもしれません。

別の方法として「System.DateTime」を使用した調整方法があります。

もう少しわかりやすく言い換えると

Get-Dateコマンドレットを使用する

方法です。

Get-Date コマンドレットのメソッドを使用して日付や時間を調整します。メソッドについてはメソッドとプロパティの違いをご覧ください。

Get-Date コマンドのメソッドを確認してみましょう。

PS C:\work> Get-Date | Get-Member -MemberType Method


   TypeName: System.DateTime

Name                 MemberType Definition
----                 ---------- ----------
Add                  Method     datetime Add(timespan value)
AddDays              Method     datetime AddDays(double value)
AddHours             Method     datetime AddHours(double value)
AddMilliseconds      Method     datetime AddMilliseconds(double value)
AddMinutes           Method     datetime AddMinutes(double value)
AddMonths            Method     datetime AddMonths(int months)
AddSeconds           Method     datetime AddSeconds(double value)
AddTicks             Method     datetime AddTicks(long value)
AddYears             Method     datetime AddYears(int value)
CompareTo            Method     int CompareTo(System.Object value), int CompareTo(datetime value...
Equals               Method     bool Equals(System.Object value), bool Equals(datetime value), b...
GetDateTimeFormats   Method     string[] GetDateTimeFormats(), string[] GetDateTimeFormats(Syste...
GetHashCode          Method     int GetHashCode()
GetObjectData        Method     void ISerializable.GetObjectData(System.Runtime.Serialization.Se...
GetType              Method     type GetType()
GetTypeCode          Method     System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetT...
IsDaylightSavingTime Method     bool IsDaylightSavingTime()
Subtract             Method     timespan Subtract(datetime value), datetime Subtract(timespan va...
ToBinary             Method     long ToBinary()
ToBoolean            Method     bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte               Method     byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar               Method     char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime           Method     datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal            Method     decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble             Method     double IConvertible.ToDouble(System.IFormatProvider provider)
ToFileTime           Method     long ToFileTime()
ToFileTimeUtc        Method     long ToFileTimeUtc()
ToInt16              Method     int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32              Method     int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64              Method     long IConvertible.ToInt64(System.IFormatProvider provider)
ToLocalTime          Method     datetime ToLocalTime()
ToLongDateString     Method     string ToLongDateString()
ToLongTimeString     Method     string ToLongTimeString()
ToOADate             Method     double ToOADate()
ToSByte              Method     sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToShortDateString    Method     string ToShortDateString()
ToShortTimeString    Method     string ToShortTimeString()
ToSingle             Method     float IConvertible.ToSingle(System.IFormatProvider provider)
ToString             Method     string ToString(), string ToString(string format), string ToStri...
ToType               Method     System.Object IConvertible.ToType(type conversionType, System.IF...
ToUInt16             Method     uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32             Method     uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64             Method     uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
ToUniversalTime      Method     datetime ToUniversalTime()

この中で注目していただきたいのは、

AddDays
AddHours
AddMilliseconds
AddMinutes
AddMonths
AddSeconds
AddTicks
AddYears

といった「Add○○」メソッドです。

これらのメソッドは○○に該当するパラメータを増やすもしくは減らすことができます。

つまり、

AddHours ⇒ 時間(Hours)を増やすまたは減らす

ということです。

例えば「1時間増やす」場合であれば、

.AddHours(1)

また、「2時間減らす」場合であれば

.AddHours(-2)

という風にメソッドの引数部分に増分を指定します。

実際にGet-Dateコマンドレットでメソッドを使ってみましょう。

PS C:\work> #現在時刻を取得
PS C:\work> Get-Date

2016年11月20日 14:33:25


PS C:\work> #1時間増やす
PS C:\work> (Get-Date).AddHours(1)

2016年11月20日 15:33:52


PS C:\work> #2日減らす
PS C:\work> (Get-Date).AddDays(-2)

2016年11月18日 14:34:14

PS C:\work> #出力の型を調べる
PS C:\work> (Get-Date).AddDays(-2).GetType().Name
DateTime

このように Get-Date コマンドレットに対してメソッドを使用することで現在時刻を操作することができます。

上の実行結果で最後の3行部分を見るとゴヤゴチャとメソッドを繋げています。しかし、着目して欲しいのはその結果部分です。

「DateTime」

であることがわかります。

Set-Date コマンドレットは「System.DateTime」型のデータを使って時刻を設定するということを思い出してください。

上の Get-Date の結果が「DateTime」型なので、これを Set-Date に渡してあげることで時刻を設定することができるのです!

ということで早速実行してみましょう。

PS C:\work> #現在時刻を取得
PS C:\work> Get-Date

2016年11月20日 14:42:09


PS C:\work> #1時間増やす
PS C:\work> Set-Date -Date (Get-Date).AddHours(1)

2016年11月20日 15:42:36


PS C:\work> #2日減らす
PS C:\work> Set-Date -Date (Get-Date).AddDays(-2)

2016年11月18日 15:43:00

このように ”-Date” オプションでも Get-Date コマンドレットと組み合わせることで現在時刻からの調整が可能です。

まとめ

システムの日付・時刻を指定して変更する場合は

Set-Date -Date <指定日>

システムの日付・時刻を指定して調整する場合は

Set-Date -Adjust <調整内容>

Get-Dateコマンドレットと組み合わせる場合は

パターン① – 時刻を設定する
Set-Date -Date (Get-Date <各オプション>)
パターン② – 現在時刻から調整する
Set-Date -Date (Get-Date).Add○○(調整内容)

 

コメントを残す

メールアドレスが公開されることはありません。