2014-12-19 124 views
0

我有这个脚本每半小时运行一次。如果该值大于99,它会发送一封电子邮件,但如果该值仍然为99,我不希望它每30分钟发送一次电子邮件。如何设置全局变量和

我只希望它发送一次电子邮件。如果该值回到99以下,然后再大于99,则只发送一次电子邮件。

这里是脚本

$main = 100 


IF ($main -gt 99) { 
Write-Host $main 
##Send Email 
} 
else 
{ 
Write-Host "Not Greater than 99." 
} 

我试了一下,这是行不通的
我尝试使用全局变量,并设置等于无,如果$var1 -eq "NOTSENT" -and $main -gt 99它会发送电子邮件和设置$var1 = "SENT"。我需要帮助。

$main = 100 
$var1 

IF (($main -gt 99) -and ($var1 -eq "NOTSENT")) { 
Write-Host $main 
##Send Email 
$var1 = "SENT" 
} 
else 
{ 
Write-Host "Not Greater than 99." 
$var1 = "NOTSENT" 
} 
+1

如何脚本安排?我猜你在Windows的任务计划程序中每30分钟调用一次脚本就有一个计划任务?然后你必须坚持你的“国家”以外的脚本。 –

回答

2

“全局”只意味着它在创建它的PS会话时是全局的。当会话结束时,变量不见了。如果您需要将该值从一个会话保存到另一个会话,则需要将其写入磁盘,然后在下次脚本运行时将其读回。

+0

这就是我不想做的事情。我想我必须这样做。 – user206168

+0

就是这样或设计你的脚本不断运行,以便会话保持打开。@ user206168 – Matt

+0

我有问题,如果我的脚本运行。它从文本文件中读取一封电子邮件,因此它将运行其他条件。所以其他条件将文本文件设置为“NOTSENT”,所以下次脚本运行它会再次发送电子邮件。你能看到我在这里做错了吗? – user206168

2

mjolinor对它不工作的原因是正确的;我不会重申这一点。

但是,而不是写入到磁盘,您可以设置用户级或者计算机级的环境变量,而不是:

[Environment]::SetEnvironmentVariable('Variable', 'Value' , 'User') 
[Environment]::SetEnvironmentVariable('Variable', 'Value' , 'Machine') # requires elevation 

http://technet.microsoft.com/en-us/library/ff730964.aspx

+0

这也可以工作,但在运行脚本的机器重新启动后将无法生存。 – mjolinor

+0

真的吗?我现在不能重新启动我的机器来测试,但这对我来说并不合适。你能指出一些关于它的文档吗? – briantist

+1

@mjolinor设置用户级别或机器级别env var将导致该env var保持重新启动。也许你正在考虑特定于流程的流程级环境变量,并且不会超过流程的生命周期。 –