【问题标题】:Long running Powershell command to to run with schtasks长时间运行的 Powershell 命令与 schtasks 一起运行
【发布时间】:2018-07-03 23:50:35
【问题描述】:

我在远程服务器上有各种自动化功能,我通过 Python 脚本使用 pywinrm。我已经自动化了很多 Powershell 东西命令,但是我从来不需要运行长时间运行的 Powershell 命令。

我现在正在尝试安排一些性能计数器在性能测试期间进行捕获,并提出了以下方法来捕获我想要的内容:

Start-Job { & Get-counter "\Processor(_Total)\% Processor Time", "\Memory\Available Bytes" -SampleInterval 2 -MaxSamples 10 | Export-counter -Path $home\Desktop\perf_data.csv -FileFormat CSV }

但是,作为自动化的一部分,我想向 schtasks 提供一个命令,以便在特定时间跨所有服务器运行它。目前该过程以以下命令开始,但没有产生任何输出 - 我认为该任务一开始就死了:

schtasks /create /tn "Perf Test" /tr "powershell -noexit -command { & Start-Job { & Get-counter '\Processor(_Total)\% Processor Time', '\Memory\Available Bytes' -SampleInterval 2 -MaxSamples 10 | Export-counter -Path $home\Desktop\perf_data.csv -FileFormat CSV }}" /sc once /st 16:58:00 /sd 24/01/2018

我意识到我可以通过安排脚本运行而不是命令来让自己更轻松,但理想情况下我希望将其作为命令运行。

如果有人可以提供帮助,请提前致谢。

【问题讨论】:

  • 不确定 $home 在脚本块中是否可用
  • 使用所有这些语法,使用-EncodedCommand。我recently answered a question for a similar thing
  • @EBGreen 应该是。它基本上是$Env:UserProfile的别名
  • 感谢@TheIncorrigible1。不幸的是,无论是否编码,它仍然尝试以相同的方式执行。我认为这更多地与让任务在后台继续运行有关,这就是为什么在我的第二行代码中我使用-noexit,我认为这对我有帮助,但似乎无法让它工作。
  • 您使用工作有什么原因吗?我运气不好让他们始终如一地工作。此外,您在脚本块中的呼叫操作员不会做任何事情

标签: windows powershell scheduled-tasks


【解决方案1】:

所以我对计数器不是很熟悉,但是这个解决方案应该适合你:

$Command = [Convert]::ToBase64String(
    [Text.Encoding]::Unicode.GetBytes(@"
`$CounterParams = @{
    Counter = @(
        '\Processor(_Total)\% Processor Time'
        '\Memory\Available Bytes'
    )
    SampleInterval = 2
    MaxSamples = 10
}
Get-Counter @CounterParams |
    Export-Counter -Path $Env:UserProfile\Desktop\perf_data.csv -FileFormat CSV }
"@ )
)

schtasks.exe /create /tn "Perf Test" /tr "powershell -NoProfile -EncodedCommand $Command"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    相关资源
    最近更新 更多