我正在做一个计时到毫秒的计时器,当毫秒到达它们的末尾时,它会停止脚本。为什么我不会重复代码直到它完成,因为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你有没有更好的方法来解决我的问题?
发布于 2021-04-24 10:45:51
我不是远程代码执行的专家,但是在我看来,在你的scriptblock $timer.Start()的最后一行之后,远程系统上的powershell会话就会结束,你的timer对象和eventhandler也会随之结束。
请尝试使用PSSession,它可以在代码运行完成后仍保持活动状态
$session = New-PSSession -ComputerName computernamehere
Invoke-Command -script $scriptwpr -Session $session稍后使用Remove-PSSession $session清理会话
https://stackoverflow.com/questions/67235429
复制相似问题