こんにちは。チェシャ男です。(-皿-)
今回は、
【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 画面に、「管理者」と記載があれば管理者として起動が成功しました。(※下図参照)
“-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○○(調整内容)