2017-06-06 49 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 
} 
相关问题