2011-04-05 128 views
2

我已经安排了两个PowerShell脚本作为在00:00运行的任务。Powershell计划任务冲突?

今天早上我检查事件日志,发现脚本的一个失败,出现以下异常:

失败。错误是:' 未创建日志条目: 'C:\ Users \ SPSETU〜1 \ AppData \ Local \ Temp \ PowerShellLog.txt'。 错误是:'进程不能 访问文件 'C:\ Users \ SPsetupAdmin \ AppData \ Local \ Temp \ PowerShellLog.txt' 因为它正在被另一个 进程使用'。'。

  • 可以与日志的问题?这两个脚本都使用写入日志功能(请参阅poshcode.org)并使用相同的ID登录Windows事件日志。
  • 您是否知道PowerShell脚本之间的任何已知冲突作为计划任务?
  • 我是否必须一次执行任务?

回答

3

那么,既然你同时尝试从两个不同的进程写入相同的文件,你可以期待上述错误。

Powershell与任何应用程序或程序有相同的限制;在这种情况下,文件写入锁定。我不认为作为计划任务Powershell脚本有任何“特殊”限制。

我会看到你想要执行的命令使用唯一的日志文件(如果同时运行它们是你的最高优先级),或者将这些命令放在同一个脚本中,并将其作为计划任务执行(如果获取所有内容在一个日志中是您的首要任务)。

+0

我没有设置日志文件,我离开了默认的。你认为我可以使用不同的事件源ID解决问题吗? – 2011-04-05 08:16:58

+0

我将使用唯一的日志文件,然后;无论如何这是一个很好的做法。 – 2011-04-05 10:18:32

2

poshcode.org代码记录到PowerShellLog.txt文件以及事件日志中,因此两个脚本都试图写入同一个文件。如果你只是想写入事件日志,你可以尝试删除:

if ($Clobber) { 
$msg | Out-File -FilePath $Path -Force 
} else { 
$msg | Out-File -FilePath $Path -Append 
} 

如果您想保留文件记录那么我建议引入一个文件名作为参数。

+0

谢谢,最好添加一个额外的选项来禁用文件日志记录。反正我会用不同的日志文件。 – 2011-04-05 10:19:46

+1

没问题,使用不同的日志文件就是我在介绍函数参数时所说的。如果您在调用函数时将$ path变量作为参数,那么同一个函数可用于多个文件。无论如何,快乐你有一个前进的方向:) – nimizen 2011-04-05 12:14:38