今日の不思議。スタートアップスクリプトについて。

Windowsでスタートアップスクリプトといえば

gpedit.msc→Windowsの設定→スタートアップスクリプト

で設定するのが一般的と思うが、タスクスケジューラーでスケジュール設定を"システム起動時"に設定しても同じようにサーバが起動したタイミングでスクリプトをキックできる。

「そんな面倒な事しなくてもいいじゃん」という話だが、前者はスクリプト実行ユーザーがSYSTEMアカウント固定なのに対して、後者は好きなアカウントで実行できる。SYSTEMは管理者と同等レベルの権限を持つので普通は困らないが、リモートサーバに対してスクリプトを実行するような場合はタスクスケジューラーでDomainAdminなどを指定しないといけない。

以下はリモートサーバのレジストリを操作した後、リモートスクリプトを実行するようなスクリプト。これはDomainAdmin権限でないと動かない。

Set objCont = WScript.CreateObject("WshController")

Set objRegProv = GetObject("winmgmts:{impersonationLevel=Impersonate}" & "!\" & SRVNAME & "\root\default:StdRegProv")

objRegProv.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,"1"

Set objRemote = objCont.CreateScript(TMPSCRNAME,SRVNAME)

objRemote.Execute

前者は前者でドメインセキュリティ設定でドメイン内の全てのコンピューターに対して一気に設定できるという利点があるが、実はschtasksでスクリプトを組めば同じことができたりする。ただし、schtasksの場合適用先のPCが起動していることが条件なのでクライアントPCに適用するのは向かない。まぁ、通常はサーバ機で複雑なスクリプトを実行する場合のみタスクスケジューラーを使えばいいだろう。

※さらっと書いてるが、これで1週間はまった。