0

プロセス名 (Notepad.exe など) を受け入れる必要がある以下の vbs スクリプトがあり、その名前に一致するすべてのプロセスの関連する詳細を報告します。

私のPC(win 7)では問題なく動作しますが、サーバー(Windows 2000)ではエラーが発生します"Object doesn't support this property or method: objProcess.commandLine"(30行目)

Windows 2008で実行しているので、Windows 2000と関係があると思います。これを機能させるためにインストール/変更する必要があるものはありますか?

    Option Explicit

dim strComputer
dim objWMIService
dim colProcessList
dim objProcess
dim PName
dim PCommandLine
dim PCLSplit
dim input
dim counter

input = InputBox("Please Enter the Process Name, as shown in Task Manager", "Enter Process Name", , 100, 200)

If input = "" Then    
    WScript.Echo "Canceled"
Else 
    WScript.Echo "You Entered: " & input

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '" & input & "'")

    counter = 1
    For Each objProcess in colProcessList
        Wscript.echo counter & ")"
        PName = objProcess.Name
        PCommandLine = objProcess.CommandLine

        PCLSplit = SPLIT(PCommandLine,chr(34))

        Wscript.Echo "Application Name: " & PName & VbCrLf &_
        "Command Line: " & PCLSplit(1) & VbCrLf &_
        "Instance Name: " & PCLSplit(2) & VbCrLf
        counter = 1+1    
    Next

wscript.echo "COMPLETE"

End If

wscript.quit
4

2 に答える 2

2

MSDN から

コマンドライン

データ型: 文字列

アクセス タイプ: 読み取り専用

該当する場合、特定のプロセスを開始するために使用されるコマンド ライン。このプロパティは、Windows XP の新機能です。

于 2013-10-08T16:36:16.487 に答える
1

CommandLine データ型は、OS の PRE Win XP では使用できません... ただし、いくつかのエラー処理を使用して、Win2000 システムからのエラーを回避できます。

「On Error Resume Next」を追加し、変数内の Chr(34) の存在を確認します。見つからない場合は、適切に処理するか、独自の値を入力できます...また、カウンターの構文を修正しました.. . If Counter = 1 + 1 Then it will always equal 2...自分の値に 1 を加算すると、Counter = Counter + 1 になります。

Option Explicit

dim strComputer
dim objWMIService
dim colProcessList
dim objProcess
dim PName
dim PCommandLine
dim PCLSplit
dim input
dim counter

input = InputBox("Please Enter the Process Name, as shown in Task Manager", "Enter Process Name", , 100, 200)

If input = "" Then    
    WScript.Echo "Canceled"
Else 
    WScript.Echo "You Entered: " & input

    On Error Resume Next

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '" & input & "'")

    counter = 1
    For Each objProcess in colProcessList
        Wscript.echo counter & ")"
        PName = objProcess.Name
        PCommandLine = objProcess.CommandLine

        If InStr(1, PCommandLine, Chr(34),1) > 0 Then
            PCLSplit = SPLIT(PCommandLine,chr(34))
        Else
            PCLSplit = Array(vbNullString, "Not Found", "Unknown")
        End If

        Wscript.Echo "Application Name: " & PName & VbCrLf &_
        "Command Line: " & PCLSplit(1) & VbCrLf &_
        "Instance Name: " & PCLSplit(2) & VbCrLf
        counter = counter + 1    
    Next

wscript.echo "COMPLETE"

End If

wscript.quit
于 2013-10-09T06:35:45.973 に答える