powershell - 执行后不释放批处理脚本
问题描述
我有一个批处理脚本,它在发生备份事件后执行文件版本控制。此批处理脚本写入普通的 txt 日志文件,调用 PowerShell 脚本将此日志文件作为附件发送,并带有成功通知电子邮件。我已设法释放日志文件的写入锁定,以允许 PS 附加并发送文件,但批处理脚本在整个序列完成后不会停止。
当我检查日志文件时,我看到 shell 实例在脚本中放置了一个“暂停”,而不是自终止(按照指示),并导致:
Press any key to continue...
带着等待的外壳- 一个应用程序锁定的日志文件,它不允许脚本再次运行,除非日志文件被释放。
这是事件的顺序: 我唯一的暂停是在 < bak_send_exec.bat > - 它的唯一目的是启动一个 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 无法启动。
有没有人对此“功能”有可能的解决方案?
解决方案
推荐阅读
- javascript - telerik:RadToggleButton 颜色根据所选值更改
- android-studio - android studio布局视图不起作用
- macos - 詹金斯版 2.121.3 + MacOS + 登录管理员用户看不到“Jenkins 管理”
- android - 调用 Fragment 清除 startActivity() 上的应用程序视图
- jquery - 如何从 MVC 中的表中删除记录
- php - CodeIgniter 不喜欢博客中帖子的特殊字符 slug
- java - JAVA Springboot 和 IBM MQ
- c - 为什么最后一行打印 2 而不是 8?
- google-cloud-firestore - Firestore 安全规则:request.time“对象上未定义”
- asp.net-mvc - 如何在表 y 中插入与表 x 0 - 0/1 (x,y) 相关的数据