【问题标题】:PowerShell: Refreshing date stored in a variablePowerShell:刷新存储在变量中的日期
【发布时间】:2012-08-20 18:12:26
【问题描述】:

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

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

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

【问题讨论】:

  • 仅供参考,我首先在 StackOverflow 上到处搜索,发现最接近的是:stackoverflow.com/questions/11639063/… 但是,这使用了一个循环,该循环会无限期地暂停我的脚本在循环中。
  • 也许你想要完成的一个例子会有所帮助?
  • 抱歉,信息不足。这真的很简单,只需将日期/时间加上一些文本并将其重定向到文本文件以创建日志。通过各种脚本重复使用了大约 50 次。
  • fyi..这是一本很棒的免费电子书,如果您正在寻找一个相当彻底的 powershell 演练:powershell.com/cs/blogs/ebookv2/default.aspx
  • 你说的好笑,我已经在使用这本在线书并且一直在参考它。很棒的电子书!

标签: variables powershell refresh


【解决方案1】:

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

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

甚至直接使用C#:

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

【讨论】:

  • 好吧,全脑放屁……我什至没有考虑使用函数。喜欢那些简单的解决方案。非常感谢!
【解决方案2】:

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

但是...如果您想获得真正的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

【讨论】:

  • 你说得对,创建一个函数是正确的方法。此外,伟大的经验法则:“变量应该存储数据,而不是采取行动”。非常感谢您的帮助。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      相关资源
      最近更新 更多