web-dev-qa-db-ja.com

1分に1回、バックグラウンドでPowerShellスクリプトを実行します

バックグラウンドでpowershellスクリプトを1分間に1回実行する必要があります。ウィンドウが表示されない場合があります。どうすればいいのですか?

26
magol

Windowsタスクスケジューラを使用して、次のようにスクリプトを実行します。

powershell -File myScript.ps1 -WindowStyle Hidden

さらに、特定のユーザーアカウントおよびそのユーザーがログオンしているときだけでなくで実行するスクリプトを作成します。それ以外の場合は、コンソールウィンドウが表示されます。

23
Joey

おそらく、このシナリオで十分でしょう。 PowerShell実行可能ファイルを毎分起動するわけではありません(これは高価です、ところで)。代わりに、ワーカースクリプトを1分間に1回呼び出す余分なスクリプトを呼び出して(または、実際にワーカースクリプトが終了または失敗した後に1分間待機する)、1回起動します。

開始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
}

これをCmdから実行します(例:スタートアップ.batファイルから):

start /min powershell -WindowStyle Hidden -Command C:\ROM\_110106_022745\Invoke-MyScript.ps1

PowerShellウィンドウがしばらく表示されますが、start /minそしてすぐにそれは永久に隠されます。そのため、実際にはウィンドウ自体ではなく、タスクバーアイコンのみが表示されます。悪くない。

16
Roman Kuzmin

システムとして実行されるようにタスクをスケジュールします。以下のコマンドは、Powershellコンソールウィンドウを表示せずにスクリプトをバックグラウンドで実行するようにスケジュールします。

schtasks/create/tn myTask/tr "powershell -NoLogo -WindowStyle hidden -file myScript.ps1"/sc minutes/mo 1/ruシステム

/ruスイッチを使用すると、スケジュールされたタスクが実行されるユーザーコンテキストを変更できます。

10
xemlock

バックグラウンドPowerShellタスクを作成して、ウィンドウがまったく表示されない状態で毎分繰り返されるスクリプトを実行するには、powershellを管理者として実行し、Register-ScheduledJobコマンドレットを使用してスクリプトを実行します。これを実現する方法の例を次に示します。

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))

このジョブを手動で強制的に実行したい場合(おそらくトラブルシューティングのため)、Get-ScheduledJobこのようなコマンドレット:

(Get-ScheduledJob -Name 'SomeJobName').StartJob()
4
sippybear

タスクのタスクスケジューラプロパティの[全般]タブで、[ユーザーがログオンしているかどうかに関係なく実行する]ラジオボタンを選択すると、Windows 7マシンにウィンドウが表示されなくなります。

2
Mike Brady

時間間隔でスクリプトを自動的に実行する場合。 (Windows OSの場合)

1)  Open Schedule tasks from control panel.
2)  Select Task Scheduler Library from left side window.
3)  select Create Task from right side window.
4)  Enter Name in General tab (any name).
5)  Open Triggers tab -> New
6)  Select interval as needed.Use Advanced settings for repeat task. 
7)  Open Actions tab ->New
8)  Copy/Paste following line in Program/script *

* Here D:\B.ps1 in code is path to my B.ps1 file

C:\ Windows\system32\WindowsPowerShell\v1.0\powershell.exe D:\ B.ps1

9)  ok and apply changes
10) Done!  
0
Ravi Prajapati

これらの答えは歴史的です! PowerShellスクリプトをバックグラウンドジョブとして実行する場合は、スクリプトを格納するフォルダー内のCLIからstart-job。\ scriptを試してください。

0
Chris