2013年1月4日金曜日

VBSスクリプトでクライアントへソフト配布

VBSログオンスクリプトを使ってクライアントへソフトをセットアップする場合に、全てのクライアントへセットアップを実施したくないケースがあります。

最近はシンクライアントの導入も進んでいるので、1名のユーザが物理マシンと仮想マシンの両方を使用しているケースがあります。

物理マシンにはインストールしたいけれど、仮想マシンにはインストールしたくないなどの場合です。

その場合にはログインユーザ名でインストールできないので、コンピュータ名で判断するスクリプトを作成しました。

仮想マシンのコンピュータ名は末尾に「-vClient」が付きます。

なので、-vClientが末尾に付いている仮想マシンへはインストールしないようにしています。


IngServiceCount = InStr(UCase(objItem.Name), "-vClient")  の箇所です。


また、既にインストールされているかどうかは、Windowsサービスが起動しているかどうかチェックして判断しています。

「TESTSERVICE_01」という名前のサービス名が存在している場合は、既にインストール済と判断しています。


strServiceName = "TESTSERVICE_01" の箇所です。


最後にインストール対象と判断されたクライアントへは、以下を実行してインストールを開始します。


objWShell.Run "\\testdomain.local\NETLOGON\setup.exe", 0, False



★★★ 以下はサンプルVBSスクリプトです。 ★★★


On Error Resume Next
Dim objWShell
Dim objServiceList
Dim strQuery
Dim strServiceName
Dim IngServiceCount
Dim result
strComputer = "."
 
Set objWShell = CreateObject("WScript.Shell")
strServiceName = "TESTSERVICE_01"
IngServiceCount = 0

strQuery = "SELECT * FROM Win32_Service" &_
" WHERE Name ='" & strServiceName & "'"
Set objServiceList = GetObject("winmgmts:").ExecQuery(strQuery)
For Each objServiceInfo In objServiceList
  IngServiceCount = IngServiceCount + 1
Next

If IngServiceCount > 0 Then
  WScript.Quit
End If

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")  

For Each objItem in colItems
    IngServiceCount = InStr(UCase(objItem.Name), "-vClient")
Next

If IngServiceCount > 0 Then
  WScript.Quit
End If

objWShell.Run "\\testdomain.local\NETLOGON\setup.exe", 0, False
Set objServiceList = Nothing
Set objWShell = Nothing









このエントリーをはてなブックマークに追加