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

这不应该用变量来完成。变量应该存储数据,而不是采取行动。所以正确的方法是创建一个函数,以您想要的格式返回当前日期。

但是...如果您想获得真正的hack-tastic,您可以通过在对变量的所有读取设置断点来做到这一点。断点的 -Action 会将变量的值重置为当前时间。

$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。Joel Bennett 继续给人留下深刻印象。:-) 它有其局限性,已记录在案,但确实工作得很好。

基本上,它只是一个围绕@latkin 提供的答案的函数。

于 2012-08-20T18:47:20.560 回答