Windows 性能记录器 (WPR) 的 Powershell 计时器
Powershell Timer for Windows performance Recorder (WPR)
我正在做一个以毫秒为单位的计时器,当毫秒到达终点时,它会停止脚本。
为什么我不会重复代码直到它完成,因为 Windows 性能记录器正在幕后工作,wpr 正在与时间一起工作,我们必须手动停止 wpr。
问题是我的计时器在远程启动时不会停止 WPR。计时器在本地运行良好。
这里是下面的代码:
$scriptwpr = {
wpr -start cpu
function Stop-Script
{
Write-Host "Called Stop-Script."
wpr -stop C:$env:computername-PerformanceAnalyzer.etl
#[System.Management.Automation.Runspaces.Runspace]::DefaultRunspace.CloseAsync()
}
$elapsedEventHandler = {
param ([System.Object]$sender, [System.Timers.ElapsedEventArgs]$e)
Write-Host "Event handler invoked."
($sender -as [System.Timers.Timer]).Stop()
Unregister-Event -SourceIdentifier Timer.Elapsed
Stop-Script
}
$timer = New-Object System.Timers.Timer -ArgumentList 120000 # setup the timer to fire the elapsed event after 20 minutes
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed -Action $elapsedEventHandler
$timer.Start()
}
Invoke-command -script $scriptwpr -computer computernamehere
你们有更好的方法解决我的问题吗?
我远不是远程代码执行方面的专家,但在我看来,在你的脚本块 $timer.Start()
的最后一行之后,远程系统上的 powershell 会话结束,你的计时器也随之结束对象和事件处理程序。
尝试使用 PSSession,即使您的代码已 运行 完成
也可以保持活动状态
$session = New-PSSession -ComputerName computernamehere
Invoke-Command -script $scriptwpr -Session $session
稍后使用 Remove-PSSession $session
清理您的会话
我正在做一个以毫秒为单位的计时器,当毫秒到达终点时,它会停止脚本。 为什么我不会重复代码直到它完成,因为 Windows 性能记录器正在幕后工作,wpr 正在与时间一起工作,我们必须手动停止 wpr。 问题是我的计时器在远程启动时不会停止 WPR。计时器在本地运行良好。
这里是下面的代码:
$scriptwpr = {
wpr -start cpu
function Stop-Script
{
Write-Host "Called Stop-Script."
wpr -stop C:$env:computername-PerformanceAnalyzer.etl
#[System.Management.Automation.Runspaces.Runspace]::DefaultRunspace.CloseAsync()
}
$elapsedEventHandler = {
param ([System.Object]$sender, [System.Timers.ElapsedEventArgs]$e)
Write-Host "Event handler invoked."
($sender -as [System.Timers.Timer]).Stop()
Unregister-Event -SourceIdentifier Timer.Elapsed
Stop-Script
}
$timer = New-Object System.Timers.Timer -ArgumentList 120000 # setup the timer to fire the elapsed event after 20 minutes
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed -Action $elapsedEventHandler
$timer.Start()
}
Invoke-command -script $scriptwpr -computer computernamehere
你们有更好的方法解决我的问题吗?
我远不是远程代码执行方面的专家,但在我看来,在你的脚本块 $timer.Start()
的最后一行之后,远程系统上的 powershell 会话结束,你的计时器也随之结束对象和事件处理程序。
尝试使用 PSSession,即使您的代码已 运行 完成
也可以保持活动状态$session = New-PSSession -ComputerName computernamehere
Invoke-Command -script $scriptwpr -Session $session
稍后使用 Remove-PSSession $session