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

问题描述 投票:0回答:5

我的许多脚本中都使用以下变量来进行日志记录:

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

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

variables powershell refresh
5个回答
5
投票

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

但是...如果你想真正变得非常出色,你可以通过在变量的所有读取上设置断点来实现这一点。 断点的 -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

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
投票

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())"

1
投票

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

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


0
投票

相关:

#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
© www.soinside.com 2019 - 2024. All rights reserved.