[VBS] ネットワーク越しにスタートアップファイルを入れ替える

※当サイトでは広告を掲載しています

以前、HomeエディションのWindowsで、ログオンスクリプトの代用となるような処理をまとめて記事にしました。

[VBS] VBSをログオンスクリプトの代用に
会社内で使用しているPCのOSは、95%がドメインに参加できないエディションのWindowsなので、全てのPCの設定を変更する場合は、1台1台設定して回らないといけないのです。とても大変。 かといって、各自でPCの設定を変更してね、というの...

このときは、「\\192.168.1.1\logon_scripts」に、各PCが起動時に実行するVBSおよびバッチファイルを置きましたが、このサーバを入れ替えることになりました。

本来は同じ構成、同じIPで置き換えれば、クライアントPC側は特になにかする必要はなかったのですが、諸事情があり、新しいサーバは別IP、別マシン名になってしまうことに。

そこで、各クライアントPCのスタートアップに登録してあるVBSを、こっそり入れ替えてしまう処理を作成してみました。

まずは大前提

当然ですが、「VBSをログオンスクリプトの代用に」の記事にあるように、スタートアップに置くVBSが既に各クライアントPCに設定してあり、サーバ上のバッチファイル「logon_scripts.bat」を実行できていることが前提です。

各クライアントPCが、起動時にサーバ上のバッチファイルを実行できる状態に無ければ、「VBSをログオンスクリプトの代用に」の記事のように設定・設置してください。

入れ替え元(廃止予定)サーバのIPアドレスは、192.168.1.1。
入れ替え先(新しい)サーバのIPアドレスは、192.168.1.2。
ディレクトリ構成は全く同じと仮定します。

入れ替え元(廃止予定)サーバ

logon_scripts.bat の内容を、以下のように変更します。赤字部分が追加した部分。

@echo off
cd /d %~dp0
cscript \\192.168.1.1\logon_scripts\server-change.vbs
\\192.168.1.1\logon_scripts\PCView\PCView.exe > nul 2>&1
exit /b

\\192.168.1.1\logon_scripts\server-change.vbs を新たに作成します。

Option Explicit

Dim objFS
Dim objShell
Dim strFilePathFrom
Dim strFilePathTo
Dim strOldFilePath

'ファイルシステムを扱うオブジェクトを作成
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

'コピーファイルのパスを指定
strFilePathFrom = "\\192.168.1.2\logon_scripts\logon_scripts2.vbs"
strFilePathTo   = objShell.SpecialFolders("Startup") & "\logon_scripts2.vbs"
strOldFilePath  = objShell.SpecialFolders("Startup") & "\logon_scripts.vbs"

'エラー発生時にも処理を続行するよう設定
On Error Resume Next

'ファイルを上書きコピー
Call objFS.CopyFile( strFilePathFrom, strFilePathTo )

'元ファイルが無いなど、エラーになった場合の処理
If Err.Number <> 0 Then
    Err.Clear
    WScript.Quit(-1)
End If

'古いスクリプト用ファイルを削除
If objFS.FileExists( strOldFilePath ) Then
    Call objFS.DeleteFile( strOldFilePath )
End If

'「On Error Resume Next」を解除
On Error Goto 0

Set objShell = Nothing
Set objFS = Nothing

WScript.Quit(0)

入れ替え先(新しい)サーバ

新しいサーバには、新しいサーバ用のバッチファイル logon_scripts.bat を置きます。赤文字部分が変更点です。

@echo off
cd /d %~dp0
\\192.168.1.2\logon_scripts\PCView\PCView.exe > nul 2>&1
exit /b

続いて、新しいサーバ上のバッチファイルを実行するように修正した logon_scripts2.vbs を準備します。このファイルが各クライアントPCのスタートアップにコピーされます。

Dim objWShell
Set objWShell = CreateObject( "WScript.Shell" )
objWShell.Run "cmd /c \\192.168.1.2\logon_scripts\logon_scripts.bat", 0
Set objWShell = Nothing

クライアントPC

特に何も操作は必要ありません。

新旧サーバに上記バッチ/スクリプトファイルを置いておけば、クライアントPCの起動時に、スタートアップにある logon_scripts.vbs が実行され、自動で logon_scripts2.vbs がコピーされて、logon_scripts.vbs が削除されます。

以降は logon_scripts2.vbs しか実行されませんので、古いサーバに接続することはありません。

ファイルの入れ替えは意外と簡単

クライアントPCのスタートアップに置いてあるファイルを入れ替えるなんて、ちょっと考えてみても大変そうなイメージでしたが、やってみたら意外と簡単でした。

これを応用すれば、例えば会社として使ってほしくない(実行させたくない)ものがスタートアップに入っていたら、自動で削除してしまう、なんてことも容易にできそうです。

もっと言えば、アプリによっては自動でアンインストールしてしまう処理も作れてしまいます。

こういった処理をうまく使って、少しでも管理しやすい環境を作っていきたいですね。

初稿:2019年2月22日

コメント

タイトルとURLをコピーしました