0

パラメータ (引数) として渡される Windows プロセスを強制終了する VBscript を作成しようとしています。私は次のコードを持っており、問題は 8、18、または 24 行目にあると考えていますが、何が問題なのかはわかりません。そのコードを変数の代わりに notepad.exe に置き換えると、機能します。どんな助けでも素晴らしいでしょう。ありがとう。

Dim prcid
Dim check
Dim Inp
Set Inp = WScript.Arguments
check=0
Set objService = GetObject("winmgmts:")

For Each Process In objService.InstancesOf("Win32_process")
  If process.name= "Inp" Then
    prcid=process.processid
    check=1
    Exit For
  End If
Next

If check =0 Then
  WScript.Quit [ExitCode]
End if

For Each process In objService.InstancesOf("Win32_process")
  If process.name= "Inp" Then
    If process.processid=prcid Then
        strComputer = "."
        Set objWMIService = GetObject("winmgmts:" _ 
          & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
        Set colProcessList = objWMIService.ExecQuery _
          ("SELECT * FROM Win32_Process WHERE Name = 'Inp'")
        For Each objProcess in colProcessList
            objProcess.Terminate()
        Next
    End If

    Exit For
  End If
Next
4

3 に答える 3

0

変数をリテラルとして使用しています:
1. process.name= "Inp"should be process.name = Inp(2回)
2. "SELECT * FROM Win32_Process WHERE Name = 'Inp'"should be"SELECT * FROM Win32_Process WHERE Name = '" & Inp & "'"

そして、WScript.Argumentsオブジェクトを正しく使用していません。コマンドラインから最初の引数を取得するには、次を使用しますWScript.Arguments(0)

免責事項: これらの拡張機能を使用してコードをテストしたわけではありません。これらのエラーを一目で見つけただけです。内部にはもっと潜んでいる可能性があります。

于 2012-07-12T09:26:37.900 に答える
0

インターネットでこれを見つけました 多くのシステムでテスト
済み 次のプラットフォームで検証済み
サーバー 8 いいえ
Windows Server 2008 R2 はい
Windows Server 2008 はい
Windows Server 2003 はい
Windows 8 いいえ
Windows 7 はい
Windows Vista はい
Windows XP はい
Windows 2000はい


スクリプト名: WMI_KillProcess.vbs 作成日: 2010 年 10 月 5 日 作成者: Dennis Hemken 目的: この関数は、ネットワーク内の特別な PC で実行されているプロセスを名前で強制終了します。


Dim strComputer 

strComputer = "." 

fct_KillProcess "acrord32", strComputer 
' or 
' strComputer = "192.168.2.13" 
' fct_KillProcess "outlook", strComputer 

Public Function fct_KillProcess(strProcessName, strComputer) 

Dim objWMI 
Dim colServices 
Dim objService 
Dim strServicename 
Dim ret 

Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colServices = objWMI.InstancesOf("win32_process") 

For Each objService In colServices 
    strServicename = LCase(Trim(CStr(objService.Name) & "")) 
    If InStr(1, strServicename, LCase(strProcessName), vbTextCompare) > 0 Then 
        ret = objService.Terminate 
    End If 
Next 
Set colServices = Nothing 
Set objWMI = Nothing 
End Function
于 2012-07-12T22:39:08.947 に答える
0

Windows XP システムでスクリプトを実行したときに正常に動作したため、Inp の拡張機能はありませんか? また、私のシステムでは、システムとシステムアイドルプロセスを除くすべてのプロセスに拡張機能があります。拡張機能がある場合は、それを使用する必要があります。

于 2012-07-12T07:11:33.110 に答える