Garden Place TOP 技術ガーデン Hey, Scripting kiddy! Watch your back. You'll see a freaky guy.

Hey, Scripting kiddy! は皆様のPCを通じた悩みなどをScript kiddyのスクリプトで解決しようという企画です。

Script kiddyさんが色んな人の悩みをスクリプトで解決していく様はまさに痛快。関係のない無駄話も彼の魅力の一つです。

※注
これは、Microsoftがやっている「Hey,scripting guy!」のパクリ企画です。

公開日:2008.06.16

Watch your back. You'll see a freaky guy.

Hey, Scripting kiddy! は皆様のPCを通じた悩みなどをScript kiddyのスクリプトで解決しようという企画です。

今日のお便りはエビルストーカーさんからです。

「Script kiddyさん、こんにちは。悩みがあります。同じ事務所に好きな女の子がいます。彼女を思うと居ても立ってもいられません。彼女のこ(略)せん。彼女がいつもパソコンで何をしているのか、そんな事でさえ知りたいのです。この気持ちどうにかならないでしょうか?」

エビルストーカーさん、こんにちは。今Script kiddyはあなたにこのScriptを教えるか非常に悩んでいます。かのアリストテレスは言いました。「バカに権限は持たせるな」(※1)と。今この質問を目の前にし2400年の時を経て、Script kiddyはアリストテレスと感情を共有しています。

しかしScript kiddyは、己が引いてしまった不運を真っ向から受け止めたいと思います。

01 : On Error Resume Next
02 : 
03 : Const wbemFlagReturnImmediately = &h10
04 : Const wbemFlagForwardOnly = &h20
05 : 
06 : arrComputers = Array("MYKITTY")
07 : For Each strComputer In arrComputers
08 :    WScript.Echo
09 :    WScript.Echo "===="
10 :    WScript.Echo "Computer: " & strComputer
11 :    WScript.Echo "===="
12 : 
13 :    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
14 :    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", _
15 :                                            wbemFlagReturnImmediately + wbemFlagForwardOnly)
16 : 
17 :    For Each objItem In colItems
18 :        With objItem
19 :            WScript.Echo "Caption: " & .Caption
20 :            WScript.Echo "CommandLine: " & .CommandLine
21 :            WScript.Echo "CreationClassName: " & .CreationClassName
22 :            WScript.Echo "CreationDate: " & WMIDateStringToDate(.CreationDate)
23 :            WScript.Echo "CSCreationClassName: " & .CSCreationClassName
24 :            WScript.Echo "CSName: " & .CSName
25 :            WScript.Echo "Description: " & .Description
26 :            WScript.Echo "ExecutablePath: " & .ExecutablePath
27 :            WScript.Echo "ExecutionState: " & .ExecutionState
28 :            WScript.Echo "Handle: " & .Handle
29 :            WScript.Echo "HandleCount: " & .HandleCount
30 :            WScript.Echo "InstallDate: " & WMIDateStringToDate(.InstallDate)
31 :            WScript.Echo "KernelModeTime: " & .KernelModeTime
32 :            WScript.Echo "MaximumWorkingSetSize: " & .MaximumWorkingSetSize
33 :            WScript.Echo "MinimumWorkingSetSize: " & .MinimumWorkingSetSize
34 :            WScript.Echo "Name: " & .Name
35 :            WScript.Echo "OSCreationClassName: " & .OSCreationClassName
36 :            WScript.Echo "OSName: " & .OSName
37 :            WScript.Echo "OtherOperationCount: " & .OtherOperationCount
38 :            WScript.Echo "OtherTransferCount: " & .OtherTransferCount
39 :            WScript.Echo "PageFaults: " & .PageFaults
40 :            WScript.Echo "PageFileUsage: " & .PageFileUsage
41 :            WScript.Echo "ParentProcessId: " & .ParentProcessId
42 :            WScript.Echo "PeakPageFileUsage: " & .PeakPageFileUsage
43 :            WScript.Echo "PeakVirtualSize: " & .PeakVirtualSize
44 :            WScript.Echo "PeakWorkingSetSize: " & .PeakWorkingSetSize
45 :            WScript.Echo "Priority: " & .Priority
46 :            WScript.Echo "PrivatePageCount: " & .PrivatePageCount
47 :            WScript.Echo "ProcessId: " & .ProcessId
48 :            WScript.Echo "QuotaNonPagedPoolUsage: " & .QuotaNonPagedPoolUsage
49 :            WScript.Echo "QuotaPagedPoolUsage: " & .QuotaPagedPoolUsage
50 :            WScript.Echo "QuotaPeakNonPagedPoolUsage: " & .QuotaPeakNonPagedPoolUsage
51 :            WScript.Echo "QuotaPeakPagedPoolUsage: " & .QuotaPeakPagedPoolUsage
52 :            WScript.Echo "ReadOperationCount: " & .ReadOperationCount
53 :            WScript.Echo "ReadTransferCount: " & .ReadTransferCount
54 :            WScript.Echo "SessionId: " & .SessionId
55 :            WScript.Echo "Status: " & .Status
56 :            WScript.Echo "TerminationDate: " & WMIDateStringToDate(.TerminationDate)
57 :            WScript.Echo "ThreadCount: " & .ThreadCount
58 :            WScript.Echo "UserModeTime: " & .UserModeTime
59 :            WScript.Echo "VirtualSize: " & .VirtualSize
60 :            WScript.Echo "WindowsVersion: " & .WindowsVersion
61 :            WScript.Echo "WorkingSetSize: " & .WorkingSetSize
62 :            WScript.Echo "WriteOperationCount: " & .WriteOperationCount
63 :            WScript.Echo "WriteTransferCount: " & .WriteTransferCount
64 :            WScript.Echo
65 :        End With
66 :    Next
67 : Next
68 : 
69 : Function WMIDateStringToDate(dtmDate)
70 : WScript.Echo dtm: 
71 :    WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
72 :    Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
73 :    & " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
74 : End Function

エビルストーカーさん、いかがでしょうか、これで彼女のPCはあなたの前でま(自粛)う。そうです、彼女が今何のプログラムを走らせているのか、Wordで誰に恋文を書いているのか、このスクリプトでそのすべてが手に取るようにわかることでしょう。(※2) このスクリプトはWMIというインタフェースを使っています。WMIはWindowsのレジストリやサービス、その他あらゆる機能をラッピングし、WQL という手続きを介してアクセスできる機能を提供します。つまり、WMIにより提供される数百のインタフェースを介して、あなたは人のコンピュータを自在に操ることができるのです。(※3) そしてなんと恐ろしいことか、このスクリプトはScriptomatic2というツールで自動的に生成することができます。もう鼻につく同僚も、片思いの恋人も、このツールを持ったあなたの前にひれ伏すことでしょう。

権限があれば、の話ですが。(※4)

それではScript kiddyは自戒の旅に出ようと思います。

※1 あえて言う必要もないですが、嘘です。
※2 非常に誇張しています。厳密にはコマンドライン引数が取得できるので、そこから推測する程度のものです。
※3 非常にこ(ry
※4 スクリプトを実行するユーザに、ターゲットのコンピュータへの無制限のアクセス権限が必要になります。その詳細はScript kiddyがいつか真剣に語ることでしょう。


※注 これは、Microsoftがやっている「Hey,scripting guy!」のパクリ企画です。 ご意見、ご要望はお問い合わせよりお願いします。