变量没有得到更新

时间:2016-12-15 21:31:06

标签: powershell

我有一个非常小的脚本,我正试图运行,并测试。见下文:

$value = Get-Content C:\Temp\cdrc2g.txt

if ($value -ge 3600)
{
    Invoke-Expression C:\Scripts\Email.ps1
}

有一个名为“cdrc2g.txt”的文本文件,每15分钟会更新一次数值。我试图每小时在任务计划程序中运行上面的内容。当我进行测试时,我注意到文件更改时$value没有更新。它似乎抓住了第一个数字,并且永远不会更新。

例如,如果我手动将cdrc2g.txt文件更改为高于3600的某个数字,则不会发生任何事情。它应该给我发电子邮件,但PowerShell没有看到不同的价值。我已经确认PowerShell没有运行,并且在完成任务计划程序后完全关闭。每当Task Scheduler运行此脚本时,我该怎么做才能让$value更新?

4 个答案:

答案 0 :(得分:1)

手动运行脚本时值是否会更新?

当你说

  

我已确认PowerShell未运行,并且完全关闭   任务计划程序完成后。

你的意思是说,一旦脚本完成,你期望PowerShell继续运行吗?

也许你需要一个循环来保持脚本运行并重新评估文件?像somtehing一样:

extension UINavigationController {
    override open var shouldAutorotate: Bool {
        return false
    }
}

class ViewController: UIViewController {

    /*
            ...
    */

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.portrait
    }
}

由于权限或文件锁定等原因,脚本可能无法从计划任务中读取文件。您可以通过安排以下任务来确认该值是否可以读取:

While ($True) {
    $value = Get-Content C:\Temp\cdrc2g.txt

    if ($value -ge 3600) {
        Invoke-Expression C:\Scripts\Email.ps1
    }
    Start-Sleep -Seconds (15*60)
}

然后在运行后检查test.txt文件。

答案 1 :(得分:0)

您可能正在寻找-tail参数:

$value = Get-Content C:\Temp\cdrc2g.txt -Tail 1

这将始终返回最后一个条目。

答案 2 :(得分:0)

伙计们感谢所有的投入。文本文件只有一个数字 - 表示秒。如果我将脚本更改为包含[int],如下所示,一位同事告诉我:

[int] $ value = Get-Content C:\ Temp \ cdrc2g.txt

if($ value -ge 360​​0){Invoke-Expression C:\ Scripts \ Email.ps1}

我的问题消失了。我能够更改文本文件中的值并重新运行我的计划任务,它按照预期的方式工作。

答案 3 :(得分:0)

您可以使用选项-wait来获取内容命令,此选项在修改文件时等待,使用-tail 1来获取文件的最后一行

gc "C:\Temp\cdrc2g.txt" -Wait -Tail 1  | where { $_ -eq "3600"} | Invoke-Expression C:\Scripts\Email.ps1