我的许多脚本中都使用以下变量来进行日志记录:
$uDate = get-date -format "ddd MM/dd/yyyy HH:mm:ss"
唯一的问题是日期永远不会刷新,只显示声明变量时的日期/时间。
这不应该用变量来完成。 变量应该存储数据,而不是执行操作。 因此,正确的方法是创建一个函数,以您想要的格式返回当前日期。
但是...如果你想真正变得非常出色,你可以通过在变量的所有读取上设置断点来实现这一点。 断点的 -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
在不了解更多信息的情况下,也许“现在”声明一个新定义的函数?
function now()
{
get-date -format "ddd MM/dd/yyyy HH:mm:ss"
}
甚至直接使用C#:
[datetime]::Now.ToString("ddd MM/dd/yyyy HH:mm:ss")
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())"
有一种方法可以在每次使用时自动更新变量。查看 PoshCode 上的New-TiedVariable。乔尔·贝内特继续给人留下深刻印象。 :-) 它有其局限性,这些局限性已记录在案,但确实工作得很好。
基本上,它只是一个包含@latkin提供的答案的函数。
#24079
将 $Now
添加到自动变量。
您可以创建一个没有(可见)属性的类,并为此使用
ToString
方法:
Class uDateClass {
[string]ToString() {
return get-date -format "ddd MM/dd/yyyy HH:mm:ss"
}
}
$uDate = [uDateClass]::new()
$uDate
Wed 07/24/2024 21:22:47