每分钟在后台运行一次powershell脚本

mag*_*gol 26 windows powershell scheduling

我希望PowerShell脚本在后台每分钟运行一次.不会出现任何窗口.我该怎么做?

Joe*_*oey 23

使用Windows任务计划程序并运行您的脚本,如下所示:

powershell -File myScript.ps1 -WindowStyle Hidden
Run Code Online (Sandbox Code Playgroud)

此外,创建在特定用户帐户下运行的脚本,而不仅仅是在该用户登录时.否则你会看到一个控制台窗口.


Rom*_*min 17

也许这种情况会发生.我们不会每分钟启动PowerShell可执行文件(这很昂贵,BTW).相反,我们通过调用额外的脚本来启动它一次,该脚本每分钟调用一次工作脚本(或者在工作脚本退出或失败后实际等待一分钟).

创建起始Invoke-MyScript.ps1:

for(;;) {
 try {
  # invoke the worker script
  C:\ROM\_110106_022745\MyScript.ps1
 }
 catch {
  # do something with $_, log it, more likely
 }

 # wait for a minute
 Start-Sleep 60
}
Run Code Online (Sandbox Code Playgroud)

从Cmd运行(例如从启动.bat文件):

start /min powershell -WindowStyle Hidden -Command C:\ROM\_110106_022745\Invoke-MyScript.ps1
Run Code Online (Sandbox Code Playgroud)

PowerShell窗口暂时出现,但由于start /min它被永远隐藏起来,它被最小化.实际上只有一个任务栏图标会出现,而不是窗口本身.这不是太糟糕.


xem*_*ock 10

安排您的任务作为系统运行.下面的命令将安排脚本在后台运行,而不显示powershell控制台窗口:

schtasks /create /tn myTask /tr "powershell -NoLogo -WindowStyle hidden -file myScript.ps1" /sc minute /mo 1 /ru System

/ru switch允许您更改将在其中执行计划任务的用户上下文.

  • 对于任何寻找 UI 方式来执行此操作的人...转到任务属性,更改用户或组按钮,搜索对象“system”并单击“检查名称”,它应该填充对象“NT AUTHORITY\SYSTEM”。这是阻止 PS 窗口显示在我的屏幕上的唯一解决方案。 (2认同)

sip*_*ear 9

要创建后台 powershell 任务以运行每分钟重复一次且根本没有可见窗口的脚本,请以管理员身份运行 powershell,然后使用Register-ScheduledJobcmdlet 运行您的脚本。以下是如何实现这一目标的示例:

Register-ScheduledJob -Name 'SomeJobName' -FilePath 'path\to\your\ps1' -Trigger (New-JobTrigger -Once -At "9/28/2018 0am" -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([TimeSpan]::MaxValue))
Run Code Online (Sandbox Code Playgroud)

如果您想手动强制运行此作业(可能是出于故障排除目的),您可以Get-ScheduledJob像这样使用cmdlet:

(Get-ScheduledJob -Name 'SomeJobName').StartJob()
Run Code Online (Sandbox Code Playgroud)


mhe*_*zog 5

我在 IT 组织的限制下工作,他们禁止执行脚本。因此我仅限于在线。这是我使用的:

while ($true) {<insert command(s) here>;start-sleep 2}
Run Code Online (Sandbox Code Playgroud)

我是 PowerShell 的菜鸟,所以如果您有反馈意见,请保持温和;-)。