我有一个非常小的脚本,我正试图运行,并测试。见下文:
$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
更新?
答案 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 3600){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