Set-PSDebug -Trace n
到文件的调试输出.(文件是这里的关键字.)例:
脚本B:
Set-PSDebug -Trace 1
Function FuncA {
Write-Host "ABC"
FuncB
}
Function FuncB {
Write-Host "123"
}
FuncA
FuncB
Run Code Online (Sandbox Code Playgroud)
这个的正确调试输出是:
DEBUG: 15+ >>>> FuncA
DEBUG: 6+ Function FuncA >>>> {
DEBUG: 7+ >>>> Write-Host "ABC"
ABC
DEBUG: 8+ >>>> FuncB
DEBUG: 11+ Function FuncB >>>> {
DEBUG: 12+ >>>> Write-Host "123"
123
DEBUG: …
Run Code Online (Sandbox Code Playgroud) 您好,我有一个始终在后面运行的监控脚本(带有 winforms gui)。不幸的是,当用户尝试手动关闭计算机时,这会惹恼他们,因为它会引发“此应用程序正在阻止 Windows 关闭”屏幕。
所以我需要一种可靠的方法来在启动关闭时自动关闭脚本。
我尝试订阅SessionEnding - 和 SessionEnded-事件,但它不起作用:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { Exitfunction }
Run Code Online (Sandbox Code Playgroud)
更新:目前是这样的:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnded" -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Register-WmiEvent -Class win32_computerShutdownEvent -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Run Code Online (Sandbox Code Playgroud)
我添加了一个消息框来查看这些事件之一是否确实会触发,但动作脚本块执行的代码可能有错误。没有运气。当我尝试关闭 Windows 8.1 系统时,这些事件都没有发生。当我用 get-job 读取事件时,事件内部没有错误。所有这些状态都处于“未启动”状态。
有什么想法吗?
很抱歉之前是工资。我会再尝试:
情况太复杂了,无法解释,但基本上问题是:
我通过让一个脚本在另一个脚本监视的目录中创建一个包含字符串的文件来完成它。所以当它出现时,另一个脚本读取信息。它有效,但感觉“脏”。:)
我想知道是否有一种“最佳实践”——在脚本之间传递信息的方式,或者至少是一种更优雅的方式。
谢谢。