执行后批脚本无法发布

时间:2018-08-20 13:08:19

标签: powershell batch-file

我有一个批处理脚本,该脚本在备份事件发生后执行文件版本控制。该批处理脚本写入普通的txt日志文件,调用PowerShell脚本将该日志文件作为附件发送,并附带成功通知电子邮件。我设法释放了日志文件上的写锁,以允许PS附加和发送文件,但是在完成整个序列之后,批处理脚本不会停止。

当我检查日志文件时,我看到shell实例在脚本中放置了一个“ Pause”(暂停),而不是自我终止(按照指示),结果是:

  1. Press any key to continue...,带有正在等待的shell
  2. 一个应用锁定的日志文件,除非该日志文件被释放,否则它将不允许脚本再次运行。

这是事件的顺序: Script Sequence 我唯一的暂停位于中-其唯一目的是启动PS脚本:

PowerShell.exe -noprofile -executionpolicy bypass

如果我将其删除,则PS无法启动。如果我将其保存在其中,则PS会启动并完美执行,但日志文件会保持在处于暂停状态的shell实例中,直到有人杀死杀死锁定该文件的cmd.exe实例为止。

此操作在周末的凌晨01:00运行,因此不需要用户干预。

VC脚本摘要:


此相互连接的批处理文件使用时间戳重命名两个相同的文件(位于不同位置)。时间戳将写入用于通知电子邮件的变量,该通知电子邮件使用PowerShell命令发送。整个过程都记录到txt日志文件(再次运行脚本时文件将被覆盖),并且该日志文件包含在前面提到的通知电子邮件中。

脚本调用:


初始启动命令:触发版本控制过程并使用versioncontrol_post.bat > TSLog.txt 2>&1

记录进度

versioncontrol_post.bat::执行主要过程,然后以CALL bak_send_exec.bat

结尾

bak_send_exec.bat::可疑原因...整个文件的编码为三行,但如前所述,这是放松策略所必需的:

@ECHO OFF
PowerShell.exe -noprofile -executionpolicy bypass -file bak_send.ps1
PAUSE

bak_send.ps1::执行主要步骤以将临时日志(TSLog.txt)的副本复制到其最终主目录,释放TSLog文件以使用它的新副本,然后继续接收新副本并将其附加到电子邮件并发送电子邮件。该过程的最后一行是EXIT


故障发现告诉我,问题不在于PowerShell脚本,而在于调用它的脚本。取出PAUSE命令将导致PowerShell无法启动。

有人对此“功能” 有可能的解决方案吗?

0 个答案:

没有答案