web-dev-qa-db-ja.com

ユーザーがログオンせずにWindows起動時にスクリプトを実行する

これは、毎朝電源が入るWindows 2003マシンですが、数時間後まで誰もログオンしません。

その間の時間を使用してバックアップスクリプトc:\ script\backup.cmdを実行したい

マシンが起動した後、これを無人で開始するにはどうすればよいですか?

2つのレジストリキーを試しましたが、これにより、ユーザーのログオン後にスクリプトが実行されました(これは手遅れです)。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

結局、そのようなオプションがあるWindows TaskSchedulerを使用しましたが、別の可能性があるのではないかと思っていました。

14
Karl Thorwald

短い答え:GPEDIT.MSC(開始、実行、GPEdit.msc )

Windows 2000以降[1]は、ポリシーエディターでコンピューターStartup Scriptsコレクションを提供します。

  • コンピュータ設定->Windows設定->スクリプト(スタートアップ/シャットダウン)

ユーザー構成ビットには、同等のlogonスクリプト領域(つまり、コンピューターの起動後、ユーザーがログオンしたとき)があります。

長い:

GPEDIT.MSCはグループポリシー編集コンソールであり、直接使用するとローカルコンピューターのグループポリシーストアに対して実行されるため、ローカルのみのパラメーターを設定するのに役立ちます。 Active Directoryを使用する場合、同じホストを使用してフォレストでホストされるグループポリシーオブジェクト(GPO)を編集するため、同じ設定を多数のマシンで使用できます。

コンピューターのスタートアップスクリプトは、コンピューターコンテキスト、つまりLocalSystemで実行されるため、特定のユーザーまたはグループのメンバーシップを必要とするネットワークドライブにアクセスできないことがよくあります。など。コンピューターがネットワークにアクセスするとき、通常(例外を除いて)MACHINENAME $アカウントを使用します。

起動スクリプトは、マシンの起動時にプロセスを実行するための迅速かつ簡単な方法です。

ただし、コンピューターの起動プロセスは、プログラムの実行にかかる時間の影響を受けるため、バッチファイルからSTARTコマンドを使用して呼び出すか、スクリプトで実行可能ファイルが完了するのを待たないように指定することをお勧めします。使用する言語。 (重要なポイントは、スクリプトを実行する非同期である重要でない限り、または非同期で実行する必要がない限り、常に時間はかかりませんまったく。長靴=不幸なユーザー)。

Win32サービスの使用は代替オプションです。リソースキットの[〜#〜] srvany [〜#〜]ユーティリティを使用して、「サービス-ify "ほぼすべての実行可能ファイル。 VS.Net 2002以降では、マネージドサービスを直接構築することもできます。

そして、タスクスケジューラは、Vista/2008以降、はるかにより機能し、起動時にスクリプトを実行でき、アイドル時、および/またはイベントログが生成されたとき、または他の特定の条件が満たされたとき:とてもすばらしいスケジュールされたタスクには、タスクが実行されるユーザーアカウントを指定できるという利点があります(重要な場合)。

警告スクリプト: http://support.Microsoft.com/kb/25632

起動スクリプトを非同期で実行: http://msdn.Microsoft.com/en-us/library/ms811602.aspx

Vistaタスクスケジューラ(新機能): http://technet.Microsoft.com/en-us/appcompat/aa906020.aspx

[1] Windows XP、2003、Vista/2008、Windows 7/2008R2、Windows 8/2012、Windows 8.1/2012R2、Windows 10/Windows Server2016。すべて。しかし、NT4はそうしませんでした!

19
TristanK

あなたはすでに良い解決策を概説しました:

起動時に実行するようにスケジュールされたタスクを設定し、ユーザーがログオンしていないときにジョブを実行できるようにします。

8
GateKiller

グループポリシーgpedit.mscを使用して、システムの起動時にスクリプトを実行できます

1
Mark Sugarman

Active Directoryを使用している場合があります。コンピューターを独自のOUに分離するか、WMIフィルターを使用できる場合は、GPOにコンピューターの起動スクリプトが含まれています。これにより、誰かがセーフモードで侵入した場合でも、タスクスケジューラを無効にすると、起動してドメインに接続すると、スクリプトが実行されます。

0
K. Brian Kelley

あなたがこれを行う方法は私には問題ないようです。ただし、別の方法が必要な場合は、マシンの起動時にサービスが開始されるので、(再起動を可能にするために)新しい日かどうかを検出し、バックアップを実行するかどうかを検出するサービスを作成できます。

[〜#〜] i [〜#〜]がサービスとしてこれを行っていた場合、TCLを使用します。サービスとしてスクリプトを実行できるようにする拡張 twapi があります。他のスクリプト言語にも同様の機能があります。

0
Jackson