我有一个批处理脚本,该脚本在备份事件发生后执行文件版本控制。该批处理脚本写入普通的txt日志文件,调用PowerShell脚本将该日志文件作为附件发送,并附带成功通知电子邮件。我设法释放了日志文件上的写锁,以允许PS附加和发送文件,但是在完成整个序列之后,批处理脚本不会停止。
当我检查日志文件时,我看到shell实例在脚本中放置了一个“ Pause”(暂停),而不是自我终止(按照指示),结果是:
Press any key to continue...
,带有正在等待的shell 这是事件的顺序:
我唯一的暂停位于
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无法启动。
有人对此“功能” 有可能的解决方案吗?