1

ロギング用のスクリプトの多くで使用される次の変数があります。

$uDate = get-date -format "ddd MM/dd/yyyy HH:mm:ss"

唯一の問題は、日付が更新されず、変数が宣言された日時のみが表示されることです。

4

4 に答える 4

5

詳細を知らなくても、新しく定義された関数を「今」宣言するのではないでしょうか。

function now()
{ 
  get-date -format "ddd MM/dd/yyyy HH:mm:ss"
}

または、C#を直接使用することもできます。

[datetime]::Now.ToString("ddd MM/dd/yyyy HH:mm:ss")
于 2012-08-20T18:37:46.800 に答える
4

これは変数を使用して実行しないでください。変数は、アクションを実行するのではなく、データを格納する必要があります。したがって、これを行う正しい方法は、現在の日付を必要な形式で返す関数を作成することです。

しかし...本当にハックタスティックになりたい場合は、変数へのすべての読み取りにブレークポイントを設定することでこれを行うことができます。ブレークポイントの-アクションは、変数の値を現在の時刻にリセットします。

$rightNow = Get-Date
Set-PSBreakpoint -Variable rightNow -Mode Read -Action { $global:rightNow = Get-Date }

テスト中...

PS > $rightnow

Monday, August 20, 2012 11:46:04 AM

PS > $rightnow

Monday, August 20, 2012 11:46:09 AM
于 2012-08-20T18:47:10.013 に答える
1

Greg Wojanは、あなたに最良の答えを与えるために、あなたが本当に達成しようとしていることを知る必要があるというのは正しいことです。使用しようとするたびに魔法のように更新される変数が必要だと思います。私の知る限り、それはPSでは不可能です。私が考えることができる最も近いのは、次のようなことをすることです。

$uDate = {get-date -format "ddd MM/dd/yyyy HH:mm:ss"}
"The date now is $($uDate.Invoke())"
Start-Sleep -Seconds 30
"And now it is $($uDate.Invoke())"
于 2012-08-20T18:32:33.813 に答える
1

使用するたびに変数を自動的に更新する方法があります。PoshCodeでNew-TiedVariableをチェックしてください。JoelBennettは引き続き感銘を与えています。:-)文書化されている制限がありますが、非常にうまく機能します。

基本的には、@latkinによって提供される答えをラップした関数です。

于 2012-08-20T18:47:20.560 に答える