小编Rob*_*Rob的帖子

将PowerShell psdebug跟踪的日志输出记录到文件中

  1. 我有一个脚本"B",我想从中捕获Set-PSDebug -Trace n 到文件的调试输出.(文件是这里的关键字.)
  2. 我需要从另一个名为A的脚本启动脚本" B " 的执行和调试捕获.

例:

脚本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)

debugging powershell trace

8
推荐指数
1
解决办法
2381
查看次数

使用 Powershell 检测系统关闭

您好,我有一个始终在后面运行的监控脚本(带有 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 读取事件时,事件内部没有错误。所有这些状态都处于“未启动”状态。

有什么想法吗?

powershell events shutdown

5
推荐指数
1
解决办法
8734
查看次数

在独立运行的 Powershell 脚本之间传递信息

很抱歉之前是工资。我会再尝试:

情况太复杂了,无法解释,但基本上问题是:

  • 如何将字符串(最多 20 个字符)从一个脚本传递到在同一台机器上运行的另一个脚本
  • 这两个脚本在后台连续运行,在同一台机器上,在同一个用户上下文下,但不能合并
  • 不能在另一个脚本中点源一个脚本。

我通过让一个脚本在另一个脚本监视的目录中创建一个包含字符串的文件来完成它。所以当它出现时,另一个脚本读取信息。它有效,但感觉“脏”。:)

我想知道是否有一种“最佳实践”——在脚本之间传递信息的方式,或者至少是一种更优雅的方式。

谢谢。

powershell runspace

0
推荐指数
1
解决办法
1490
查看次数

标签 统计

powershell ×3

debugging ×1

events ×1

runspace ×1

shutdown ×1

trace ×1