2017-06-06 2 views
0

PowerShellスクリプトを作成しました。一部のログを監視し、出力をerror.txt(スクリプト内で作成)に保存しました。 しかし、タスクスケジューラを使用して自動実行するようにスケジュールした場合、出力ファイル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 
} 

私はというし error.txtを作成し、 echo一部を示す、5分ごとに実行するようにスケジュールし、それが唯一のエコー部分を示しています続き

は私のスクリプトです。続き

は私がPowerShellを実行するためにスケジューラに渡すパラメータです:

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

後は、PowerShellスクリプトを実行するためのarguementsです:

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

誰もが私のファイルを取得していない理由について私を助けることができます作成した?

また、このPowerShellスクリプトを呼び出して同じ方法でスケジュールした.BATファイルを作成しようとしましたが、同じ結果が得られました。個別に動作していますが、タスクスケジューラを使用して同じ結果が得られました。

+0

私のファイルは次のようになります。それらは通常 '%systemroot%\ system32'から実行されます。これを考慮に入れてください。また、 'system account'や' some user credentials'の下で動作しているかもしれません。権限を確認してください。さらに、スケジュールされたタスクが 'ユーザがログであるかどうかにかかわらず実行するように設定されていますか? ' – elzooilogico

+0

スケジュールされたタスクの作業ディレクトリとして何を定義しましたか?タスクを実行しているユーザーは、そのディレクトリへの書き込みアクセス権を持っていますか? –

+0

システム上の十分な権限を持つ 'user account'の下で実行するタスクを設定し、' * 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 
} 
関連する問題