首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows性能记录器(WPR)的Powershell计时器

Windows性能记录器(WPR)的Powershell计时器
EN

Stack Overflow用户
提问于 2021-04-24 02:51:04
回答 1查看 94关注 0票数 1

我正在做一个计时到毫秒的计时器,当毫秒到达它们的末尾时,它会停止脚本。为什么我不会重复代码直到它完成,因为Windows性能记录器在后台工作,wpr正在与时间一起工作,我们必须手动停止wpr。问题是当WPR远程启动时,我的定时器不能停止它。定时器在本地工作得很好。

下面的代码如下:

代码语言:javascript
复制
$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

你有没有更好的方法来解决我的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-24 10:45:51

我不是远程代码执行的专家,但是在我看来,在你的scriptblock $timer.Start()的最后一行之后,远程系统上的powershell会话就会结束,你的timer对象和eventhandler也会随之结束。

请尝试使用PSSession,它可以在代码运行完成后仍保持活动状态

代码语言:javascript
复制
$session = New-PSSession -ComputerName computernamehere
Invoke-Command -script $scriptwpr -Session $session

稍后使用Remove-PSSession $session清理会话

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67235429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档