none
Powershellで取得した日付が文字列結合するとアメリカ形式になってしまうのを防ぎたい RRS feed

  • 質問

  • 以下スクリプトを実行し、ADからユーザの一覧を取得し、分析をしたいと考えています。

    プロパティの内、最終ログイン日付(lastlogonDate)がアメリカ形式(mm/dd/yyyy hh:MM:ss)になってしまう為、分析がしずらい状態です。

    ただし、結合せずにそのまま出力する分には日本形式で出力される為、変換等は不要な気もしています。

    日付をyyyy/mm/dd hh:MM:ss形式でファイルに出力させる方法はないでしょうか。

    ご教示よろしくお願い致します。

    Get-ADUser -Filter * -Properties `
    name, `
    displayname, `
    lastlogonDate, `
    lockedout, `
    enabled, `
    canonicalName, `
    description, `
    memberof `
     | `
    %{ `
    $_.name+"%"+`
    $_.displayname+"%"+`
    $_.lastlogonDate+"%"+`
    $_.lockedout+"%"+`
    $_.enabled+"%"+`
    $_.canonicalName+"%"+`
    $_.description+"%"+`
    $_.memberof`
    } > C:\Users\HogeUser\Desktop\データ一覧.txt

    2018年9月25日 9:05

回答

  • 文字列(string)に日付時刻(DateTime)を結合すると、DateTimeからstringへの暗黙の型変換が行われます。

    PowerShellにおいて、あるオブジェクトから文字列への暗黙の型変換が行われるときには、現在のカルチャ(日本語環境ならja-JP)ではなく、カルチャ非依存な形式を用いて出力します。カルチャ非依存といっても、実際には英語における表記なので、今回の場合もmm/dd/yyyy hh:MM:ssという形式で出力されているわけです。

    yyyy/mm/dd hh:MM:ss形式で出力するには、DateTimeを現在のカルチャを用いてstringに変換するようにします。

    例えば、

    $_.lastlogonDate

    を、

    $_.lastlogonDate.ToString()

    とすると良いでしょう。

    DateTime.ToStringメソッドは、引数を与えないと現在のカルチャを用いて文字列化します。


    2018年9月25日 11:23
    モデレータ

すべての返信

  • 文字列(string)に日付時刻(DateTime)を結合すると、DateTimeからstringへの暗黙の型変換が行われます。

    PowerShellにおいて、あるオブジェクトから文字列への暗黙の型変換が行われるときには、現在のカルチャ(日本語環境ならja-JP)ではなく、カルチャ非依存な形式を用いて出力します。カルチャ非依存といっても、実際には英語における表記なので、今回の場合もmm/dd/yyyy hh:MM:ssという形式で出力されているわけです。

    yyyy/mm/dd hh:MM:ss形式で出力するには、DateTimeを現在のカルチャを用いてstringに変換するようにします。

    例えば、

    $_.lastlogonDate

    を、

    $_.lastlogonDate.ToString()

    とすると良いでしょう。

    DateTime.ToStringメソッドは、引数を与えないと現在のカルチャを用いて文字列化します。


    2018年9月25日 11:23
    モデレータ
  • 牟田口様

    ご教示ありがとうございます。

    なるほど、暗黙の型変換時と明示的な型変換では変換結果が異なるのですね。

    大変勉強になりました。

    ありがとうございました。

    2018年9月26日 1:37
  • やきです。

    桁数などフォーマットを合わせたいのであれば

    $_.lastlogonDate

    (Get-Date $_.lastlogonDate -Format "yyyy/MM/dd HH:mm:ss")

    のようにすることで変換ができます。

    > Get-Date "09/27/2018 11:22:33" -Format "yyyy/MM/dd HH:mm:ss"
    2018/09/27 11:22:33
    

    2018年9月27日 6:31
  • やき様

    ご教示ありがとうございます。

    なるほど、明示的に形式を指定した方が確実ですね。

    早速教えて頂いた形式に修正しました。

    ありがとうございます。

    2018年10月2日 2:48