2014年05月22日


VBScript : 10秒毎に処理を実行する( 時刻指定も可能 )

コマンドプロンプトで実行しておいて、終了はコマンドプロンプトを閉じます。実行される処理は、非同期では無いので外部のスクリプトをプロセスとして実行するといいでしょう。どうしても、同一スクリプト内で実行したい場合は、Cron の代替え : VBScript でタイマー処理 を参照して下さい
' このセクションは、cscript.exe で処理を強制させるものです
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	str = WScript.ScriptFullName
	Set WshShell = CreateObject( "WScript.Shell" )
	Call WshShell.Run( "cmd.exe /c cscript.exe """ & str & """ & pause", 3 )
	WScript.Quit
end if

Set obj = GetObject("winmgmts:\\.\root\cimv2")
Set objMonitor = obj.ExecNotificationQuery( _
	"select * from __InstanceModificationEvent " & _
	"where TargetInstance isa 'Win32_LocalTime' " & _
	" and (TargetInstance.Second = 0" & _
	" or TargetInstance.Second = 10" & _
	" or TargetInstance.Second = 20" & _
	" or TargetInstance.Second = 30" & _
	" or TargetInstance.Second = 40" & _
	" or TargetInstance.Second = 50)" _
)

Do


	Set objLatestEvent = objMonitor.NextEvent 

	' ここに処理を記述
	Wscript.Echo Now()

Loop

以下のプロパティが使用できます
class Win32_LocalTime : Win32_CurrentTime
{
  uint32 Day;
  uint32 DayOfWeek;
  uint32 Hour;
  uint32 Milliseconds;
  uint32 Minute;
  uint32 Month;
  uint32 Quarter;
  uint32 Second;
  uint32 WeekInMonth;
  uint32 Year;
};



タグ:VBScript WMI
posted by at 2014-05-22 20:40 | WMI | このブログの読者になる | 更新情報をチェックする

VBScript : 30秒後のイベント処理

30と言う秒数は、サンプルです。最もテストしやすい間隔なので使用しています。
' このセクションは、cscript.exe で処理を強制させるものです
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	str = WScript.ScriptFullName
	Set WshShell = CreateObject( "WScript.Shell" )
	Call WshShell.Run( "cmd.exe /c cscript.exe """ & str & """ & pause", 3 )
	WScript.Quit
end if

' 現在の日付・時刻を取得
dtBase = Now()
dtTarget = dtBase
' 30秒後の日付・時刻を取得
dtTarget = DateAdd( "s", 30, dtTarget )

' Win32_LocalTime に対して比較する為の値を作成
TargetH = Hour( dtTarget )
TargetM = Minute( dtTarget )
TargetS = Second( dtTarget )

' WMI の処理の為のオブジェクトを取得
Set obj = GetObject("winmgmts:\\.\root\cimv2")
' 該当する時間になればイベント発生
Set objMonitor = obj.ExecNotificationQuery( _
	"select * from __InstanceModificationEvent " & _
	"where TargetInstance isa 'Win32_LocalTime' " & _
	"and TargetInstance.Hour = " & TargetH & " " & _
	"and TargetInstance.Minute = " & TargetM & " " & _
	"and TargetInstance.Second = " & TargetS & " " _
)

Wscript.Echo "イベントを待機しています..."
' 以下の行で処理が停止します
Set objLatestEvent = objMonitor.NextEvent 

' イベントが発生したら、ここ以下が実行される
Wscript.Echo "イベントが発生しました"
Wscript.Echo dtTarget
Wscript.Echo Now()

以下では、イベントに関する解説と、ログオフさせる方法について書かれています

スクリプトセンターのドキュメント

あるプロセスを開始し、そのプロセスが終了した時点でユーザーをログオフさせる


posted by at 2014-05-22 20:35 | WMI | このブログの読者になる | 更新情報をチェックする

2010年03月23日


VBScript : 数値として比較できる OS のバージョンの取得

Windows 2000 : 5.0、XP : 5.1
Vista : 6.0、Windows7 : 6.1

なので、if GetOSVersion() > 5 then というふうに使えます。

関連する情報

Windows NT系 - Wikipedia



ブラウザでダウンロード
<JOB>
<SCRIPT
	language="VBScript"
	src="http://lightbox.on.coocan.jp/webwsh/GetOSVersion.vbs"
></SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************

	MsgBox( GetOSVersion() )

</SCRIPT>
</JOB>

上記コードで、オンラインの関数をテストできます


タグ:Windows
posted by at 2010-03-23 22:24 | WMI | このブログの読者になる | 更新情報をチェックする

2009年07月20日


VBScript : スクリプトが存在するディレクトリをユーザ環境変数の PATH へ登録

対象ディレクトリの中に置いて実行するだけです。
このスクリプトは、スクリプトのあるディレクトリを登録するので、
インストールしたいアプリケーションと共に保存しておけば
呼び出すだけで目的が達成されます
ブラウザでダウンロード
' **********************************************************
' ■ スクリプトが存在するディレクトリを
'    ユーザ環境変数の PATH へ登録します
'
' ■ もし、システム環境変数に既に同じパスがあれば
'    登録しません
'
' ■ 登録位置は、一番最後です
' **********************************************************
strTitle = "スクリプトが存在するディレクトリをユーザPATH環境変数に登録"

' **********************************************************
' PC 名と ユーザ名を取得
' **********************************************************
Set WshNetwork = CreateObject( "WScript.Network" )
strUser = WshNetwork.UserName
strMachine = WshNetwork.ComputerName

' **********************************************************
' スクリプトが存在するディレクトリを取得
' **********************************************************
Set Fso = CreateObject( "Scripting.FileSystemObject" )

strScriptPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strScriptPath )
Set obj = obj.ParentFolder
strScriptPath = obj.Path

' strScriptPath に 使用するディレクトリがセットされています


' **********************************************************
' システム環境変数のチェック
' **********************************************************
strValue = ""

strComputer = "."
Set obj = GetObject("winmgmts:\\.\root\cimv2")

Set objItems = obj.ExecQuery _
   ("select * from Win32_Environment where SystemVariable = True and Name = 'PATH'")

For Each objItem in objItems
	strValue = objItem.VariableValue
Next

if strValue <> "" then
	aData = Split( strValue, ";" )

	For I = 0 to Ubound( aData )
		if UCase(aData(I)) = UCase(strScriptPath) then
			Call Msgbox( "システム環境変数に既に登録されています", 0, strTitle )
			Wscript.Quit
		end if
	Next
end if


' **********************************************************
' ユーザ環境変数のチェック
' **********************************************************
strValue = ""

strComputer = "."
Set obj = GetObject("winmgmts:\\.\root\cimv2")

Set objItems = obj.ExecQuery _
   ("select * from Win32_Environment where SystemVariable = False and Name = 'PATH'")

For Each objItem in objItems
	if Ucase( objItem.UserName ) = Ucase(strMachine & "\" & strUser) then
		strValue = objItem.VariableValue
	end if
Next

if strValue <> "" then
	aData = Split( strValue, ";" )

	For I = 0 to Ubound( aData )
		if UCase(aData(I)) = UCase(strScriptPath) then
			Call Msgbox( "ユーザ環境変数に既に登録されています", 0, strTitle )
			Wscript.Quit
		end if
	Next
end if


' **********************************************************
' ユーザ環境変数を登録
' **********************************************************
strValue = strValue & ";" & strScriptPath

Set objEnv = obj.Get("Win32_Environment").SpawnInstance_

objEnv.Name = "PATH"
objEnv.UserName = strMachine & "\" & strUser
objEnv.VariableValue = strValue
objEnv.Put_




以下は、削除用です
システムとログインしているユーザをチェックして、両方にあれば
両方とも削除します。

ブラウザでダウンロード
■ 関連するページ
環境変数作成
Hey, Scripting Guy! : Path 環境変数に場所を追加する方法はありますか
Hey, Scripting Guy! : Path 環境変数から値を削除する方法はありますか
wmiquery
PATH 環境変数メンテナンス : Redmond Path


posted by at 2009-07-20 19:40 | WMI | このブログの読者になる | 更新情報をチェックする

2009年06月19日


VBScript : WMIでリモートPCのサービス開始

' リモートコンピュータの WMI オブジェクトを取得

Const Impersonate = 3

strServer = "ped0-007"
strUser = "lightbox"
strPassword = "password"

' ロケータ
Set objLocator = CreateObject("WbemScripting.SWbemLocator")

on error goto 0
' サービス
Set objWMIService = objLocator.ConnectServer( _
	strServer, _
	"root\cimv2", _
	strUser, _
	strPassword _
)
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if

' セキュリティ
objWMIService.Security_.ImpersonationLevel = Impersonate
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' 対象サービスを取得
Query = "Select * from Win32_Service where Name='Spooler'"
Set colServiceList = objWMIService.ExecQuery(Query) 

' サービス開始
For each objService in colServiceList 
	errReturn = objService.StartService()
Next

Wscript.Echo errReturn

■ 関連する記事
WMIでローカルPCのサービス開始
コマンドプロンプトからサービス開始


posted by at 2009-06-19 10:40 | WMI | このブログの読者になる | 更新情報をチェックする