2017-06-06 25 views
0

我製作了一個PowerShell腳本,它將監視一些日誌並將輸出保存在error.txt(在腳本中創建)中,該腳本在單獨運行時工作正常。 但是當我安排使用Task Scheduler進行自動執行時,輸出文件error.txt未被創建。休息一切工作正常。PowerShell腳本的輸出文件沒有在使用任務計劃程序安排後創建

以下是我的腳本:

$Modified = Get-Item "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log" | 
      Foreach {$_.LastWriteTime.ToLongTimeString()} 

$DateTime = Get-Date -format "ddd MMM dd HH:mm:ss yyyy" 
$DateTime1 = Get-Date -format "ddd MMM dd" 
$Time4 = Get-Date -format "HH" 
echo $Time4 

$test = ($Time4) - 1 
echo $test 

$test2 = $DateTime1 +" " + $test 
echo $test2 

$a = Get-Content "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log" | 
    Where-Object {$_ -match $test2} | 
    Where-Object {$_ -match "error"} 

if ($a) { 
    Get-Content "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log" | 
    Where-Object {$_ -match $test2} | 
    Where-Object {$_ -match "error"} | 
    Out-File -Append error.txt 
} else { 
    echo -$DateTime---no-errors-in-last-hour- | 
    Out-File -Append error.txt 
} 

當我安排它每5分鐘運行,而不是創造error.txt並顯示echo部分,那隻能說明回聲一部分。

以下是參數我傳遞給調度運行PowerShell的:繼

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe 

是運行PowerShell腳本的arguements:

-File "C:\Users\gurlove.chopra\Desktop\SAMPLE_WATCHER8.PS1" 

誰能幫助我關於爲什麼我的文件沒有得到產生的?

此外,我試圖創建一個.BAT文件,它調用這個PowerShell腳本,並以相同的方式安排它,但我面臨相同的結果,即單獨它工作正常,但使用任務計劃程序我得到了相同的結果。

+0

計劃任務不從,你應該運行他們這樣做。它們通常從'%systemroot%\ system32'運行。考慮到這一點。另外,它們可能在'system account'下或'some user credentials'下運行。檢查權限。另外,計劃的任務是否設置爲「運行用戶是否登錄?」 – elzooilogico

+0

您將什麼定義爲計劃任務的工作目錄?運行該任務的用戶是否具有對該目錄的寫入權限? –

+0

我建議將任務設置爲在用戶帳戶下運行,並在系統上擁有足夠的權限,並設置'初始路徑'(在* action *選項卡中的_arguments_下面) – elzooilogico

回答

1

非常感謝您對elzooilogico和Ansgar Wiechers的關注,這是很好的幫助。

我在我的PowerShell腳本中做了一些小改動,而不是隻寫文件的名字,我給了它正在工作的完整路徑和賓果。

我的文件看起來像現在這樣:

$Modified= Get-Item "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log"| Foreach {$_.LastWriteTime.ToLongTimeString()} 

$DateTime= Get-Date -format "ddd MMM dd HH:mm:ss yyyy" 

$DateTime1 = Get-Date -format "ddd MMM dd" 

$DateTime2 = Get-Date -format "HH:mm:ss" 

$Time4 = Get-Date -format "HH" 
echo $Time4 
$Time5 = Get-Date -format "mm" 

$Time6 = Get-Date -format "ss" 

$test= ($Time4)- 1 
echo $test 

$test2= $DateTime1 +" " + $test 
echo $test2 

$a= Get-Content "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log"|Where-Object {$_ -match $test2}|Where-Object {$_ -match "error"} 


if ($a){ 
Get-Content "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log"|Where-Object {$_ -match $test2}|Where-Object {$_ -match "error"} | Out-File -Append C:\Users\gurlove.chopra\Desktop\error.txt 
} 
else{ 
echo -$DateTime---no-errors-in-last-hour-|Out-File -Append C:\Users\gurlove.chopra\Desktop\error.txt 
} 
相關問題