SQLの窓

2014年08月30日


VBSCript+WMI : コンピュータ上のファイル検索と詳細情報

サンプルでは、ローカルコンピュータですが、リモートコンピュータへの接続処理を追加すれば、リモートでの検索も可能だと思います(未確認)。

WQL(SQL for WMI) で注意するのは、通常のプログラミング言語と同じで、\ を \\ で表現するところです。

CIM_DataFile class
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colFiles = objWMIService. _ 
    ExecQuery("Select * From CIM_DataFile Where FileName = 'readme' and Extension = 'txt' and Name like 'C:\\backup%'") 

Wscript.Echo "件数 : " & colFiles.Count
if colFiles.Count <> 0 then
	For Each objFile in colFiles

		Wscript.Echo "-------------------------------------"

		Set Props = objFile.Properties_
		For Each Prop in Props
			if not isArray( Prop.Value ) then
				Wscript.Echo Prop.Name & " : " & Prop.Value
			else
				Wscript.Echo Prop.Name
			end if
		Next

	Next
end if

実行は、必ずコマンドプロンプトから行います

例) cscript ファイル検索.vbs > flles.log

以下が出力の一件分です。
-------------------------------------
AccessMask : 18809343
Archive : True
Caption : c:\backup\readme.txt
Compressed : False
CompressionMethod : 
CreationClassName : CIM_LogicalFile
CreationDate : 20140830131541.520550+540
CSCreationClassName : Win32_ComputerSystem
CSName : COMPNAME
Description : c:\backup\readme.txt
Drive : c:
EightDotThreeFileName : c:\backup\readme.txt
Encrypted : False
EncryptionMethod : 
Extension : txt
FileName : readme
FileSize : 58
FileType : Text Document
FSCreationClassName : Win32_FileSystem
FSName : NTFS
Hidden : False
InstallDate : 20140830131541.520550+540
InUseCount : 
LastAccessed : 20140830131541.520550+540
LastModified : 20140830131555.161330+540
Manufacturer : 
Name : c:\backup\readme.txt
Path : \backup\
Readable : True
Status : OK
System : False
Version : 
Writeable : True



posted by lightbox at 2014-08-30 13:26 | VBS + WMI | このブログの読者になる | 更新情報をチェックする

2014年03月09日


VBScript : OSのバージョンを取得



関数になっていますので、他から利用可能です

バージョン数値(小数以下がある場合もある) = GetOSVersion()
Wscript.Echo GetOSVersion()

' **********************************************************
' Windows 2000 : 5
' Windows XP   : 5.1
' Windows 7    : 6.1
' Windows 8    : 6.2
' Windows 8.1  : 6.3
' **********************************************************
Function GetOSVersion()

	Dim obj,colTarget,objRow,str,aData,nData,I

	Set obj = GetObject("winmgmts:\\.\root\cimv2")
	Set colTarget = obj.ExecQuery( "select * from Win32_OperatingSystem" )
	For Each objRow in colTarget
		str = objRow.Version
	Next

	aData = Split( str, "." )
	For I = 0 to Ubound( aData )
		if I > 1 then
			Exit For
		end if
		if I > 0 then
			nTarget = nTarget & "."
		end if
		nTarget = nTarget & aData(I)
	Next

	GetOSVersion = CDbl( nTarget )

End Function

関連する記事

WSH : 指定したキーでレジストリエディタを開く

レジストリエディタの直前に開いたレジストリの場所の保存名が、Windows バージョンによって変化しています。


タグ:VBScript 関数 WMI
posted by lightbox at 2014-03-09 00:28 | VBS + WMI | このブログの読者になる | 更新情報をチェックする

2011年08月12日


VBS : コンピュータから c$ 共有を一時的に削除

まず、共有名の一覧は以下で取得します
( 削除後の確認に使用します )
strComputer = "."  
  
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * From Win32_Share")  
  
For Each objItem in colItems  
    Wscript.Echo objItem.Name  
Next 

以下の解説にもありますが、C$ は一時的に削除され、再起動すると復活します

Hey, Scripting Guy! コンピュータから C$ 共有を削除する方法はありますか
strComputer = "." 
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
 
Set colShares = objWMIService.ExecQuery _ 
    ("Select * from Win32_Share Where Name = 'C$'") 
 
For Each objShare in colShares 
    objShare.Delete 
Next





posted by lightbox at 2011-08-12 08:57 | VBS + WMI | このブログの読者になる | 更新情報をチェックする

2011年03月18日


VBS : 指定した HOST 名を現在の IP アドレスで HOSTS ファイルに登録するスクリプト

最初の PC 名は処理に必要ありませんが、確認表示の為に取得しています。「テスト用コンピュータ名」に指定する HOST 名を設定しますが、想定しているのは、Windows7 の XPモードで環境が移動した際に、その環境で取得した(DHCP) IPアドレスに対して、「固定」の HOST 名で名前解決しようというものです。

■ IPアドレスの取得
■ HOSTS があるディレクトリの取得
■ HOSTS ファイルを開いてすべてのテキストを取得
■ 新規なのか、既に以前設定されていたかをチェック
■ 書き込み

というプロセスで実行されます。作業する前には、HOSTS ファイルのオリジナルをバックアップしておくといいと思います。
' 現在のコンピューター名の取得
Dim ComputerName
Set objWMIService = GetObject("winmgmts:\.\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")  

For Each objItem in colItems
	ComputerName = objItem.Name
	Exit For
Next 

Wscript.Echo ComputerName


' テスト用コンピュータ名
Dim TestComputerName

TestComputerName = "layla"


' IPアドレスの取得
Dim IPAddress

Set obj = GetObject("winmgmts:\.\root\cimv2")
Set objTargets = obj.ExecQuery( _
	"select * from Win32_NetworkAdapterConfiguration " & _
	"where IPEnabled = True" _
	)
For Each objTarget in objTargets
	For Each objAddress in objTarget.IPAddress
		IPAddress = objAddress & ""
		Exit For
	Next
Next

Wscript.Echo IPAddress


' HOSTS があるディレクトリの取得
Set obj = CreateObject("Shell.Application")
Set objFolder = obj.NameSpace( &h25 )


' HOSTS ファイルを開いてすべてのテキストを取得
FilePath = objFolder.Self.Path&"\drivers\etc\hosts"
Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set objHandle = Fso.OpenTextFile( FilePath, 1 )
strText = objHandle.ReadAll
aData = Split( strText, vbCrLf )
objHandle.Close


' 新規なのか、既に以前設定されていたかをチェック
bExist = False
For I = 0 to Ubound( aData )-1
	aWork = Split( aData(I), " " )
	if Ubound(aWork) >= 0 then
		if Trim(aWork(0)) <> "" then
			if Ubound( aWork ) = 1 then
				strServer = Trim(aWork(1))
				if Ucase(TestComputerName) = Ucase(strServer) then
					bExist = True
					aData(I) = IPAddress & " " & TestComputerName
					Exit For
				end if
			end if
		end if
	end if
Next

' 新規
if not bExist then
	strText = strText & vbCrLf & IPAddress & " " & TestComputerName & vbCrLf
else
' 既に以前設定されている
	strText = Join( aData, vbCrLf )
end if

' 書き込み
Set objHandle = Fso.OpenTextFile( FilePath, 2, True )
objHandle.Write strText
objHandle.Close





posted by lightbox at 2011-03-18 16:32 | VBS + WMI | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり