PowerShell:存储在变量中的刷新日期

时间:2012-08-20 18:12:27

标签: variables powershell refresh

我有许多用于记录的脚本中使用的以下变量:

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

唯一的问题是日期永远不会刷新,只显示声明变量的日期/时间。

4 个答案:

答案 0 :(得分:5)

不知道更多,也许“现在”声明一个新定义的函数?

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

甚至直接使用C#:

[datetime]::Now.ToString("ddd MM/dd/yyyy HH:mm:ss")

答案 1 :(得分:3)

不应该使用变量。变量应该存储数据,而不是采取行动。因此,正确的方法是创建一个以所需格式返回当前日期的函数。

但是......如果你想要真正破解,你可以通过在变量的所有读取上设置断点来实现。 -offction断点会将变量的值重置为当前时间。

$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

答案 2 :(得分: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())"

答案 3 :(得分:1)

有一种方法可以在每次使用时自动更新变量。在PoshCode查看New-TiedVariable。乔尔贝内特继续留下深刻印象。 :-)它有其局限性,有记录,但确实很好用。

基本上它只是一个包含@latkin提供的答案的函数。