2014-12-19 162 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保持重新啓動。也許你正在考慮特定於流程的流程級環境變量,並且不會超過流程的生命週期。 –