Windows Server 2008 R2でユーザのプロセスを終了する方法

このQ&Aのポイント
  • Windows Server 2008 R2で仮想デスクトップを使用して、80名程度のユーザがログオンしている場合、ユーザのプロセスを終了する方法について検討しています。
  • 現在、Win32_Processを使用してプロセス一覧を取得し、該当するプロセスIDを特定してkillしていますが、全ユーザのプロセスが検索対象となり処理に時間がかかることが懸念されています。
  • 可能であれば、特定のユーザだけのプロセスを検索対象としたいです。他にWMI以外の方法でも構いませんので、アドバイスをいただけると助かります。
回答を見る
  • ベストアンサー

ユーザのプロセスを終了する方法

Windows Server 2008 R2で仮想デスクトップを使用しています。(XenApp 6.5を使用) サーバには80名程度のユーザがログオンして、それぞれアプリケーションを起動しているため、 プロセスの数が非常に多くなります。(同じプロセス名でもユーザ数分起動しているため) 上記の環境であるアプリを終了する際に、サブ画面のプロセスが起動している場合は 一緒に終了するような作りにしたいと考えており、現在のところ以下のWMIのスクリプトを 使用してプロセスの一覧を取得し、for文で一覧から該当するプロセスIDを特定してkillする というような仕組みを検討しております。 Strcomputer = "." Set objWMIService = GetObject("winmgmts:\\" & Strcomputer & "\root\cimv2") Set colitems = objWMIService.ExecQuery("Select * from Win32_Process", , 48) ただ、上記のようにWin32_Processを使用すると、サーバ上で起動している全ユーザの プロセスが検索対象となってしまうため、処理に時間がかかることを懸念しております。 可能であれば、そのユーザだけのプロセスを検索対象としたいのですが、 そのような方法はありますでしょうか? WMI以外の方法でも構いませんので、アドバイスを頂けると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • pc_net_sp
  • ベストアンサー率46% (468/1003)
回答No.1

ネットワークのIPアドレスの割当方法はやっぱDHCPですよね!! 固定IP方式にすれば、IPアドレスから使用ユーザーが割り出せるんですけど。 でも、某病院のシステム管理者は500台以上のクライアントを固定IPでネットワーク構築し、問題解決を自分のPCから遠隔操作してます。 そうする事により、サーバー室に行く事もサーバーを直接いじることもありません。 80人のクライアントを抱えていると、国家資格をある程度持っている方が良いです。(もしくは、同等の知識) http://www.16jp.net/archives/job_3.php

---yamaori---
質問者

お礼

ご回答ありがとうございました。 アクセス元のユーザ端末へのIPアドレスの割り当てはDHCPなので、 こちらの方法ではちょっと実現は難しそうです。 別の方法についても検討してみようと思います。

関連するQ&A

  • プリンタ一覧の取得

    お世話になります。 ネットワーク上の他クライアントのプリンタ一覧を取得する方法を探しています。 環境はWin2000です。 クライアントAから、クライアントBにログオンしているユーザー2のプリンタ一覧を取得する方法はあるのでしょうか。 strComputer ="クライアントB" Set objWMIService = GetObject( "winmgmts://" & strComputer & "/root/cimv2" ) Set PrtSet = objWMIService.ExecQuery("Select * From Win32_Printer") For Each Prt In PrtSet MsgBox Prt.Caption Next 上記、クライアントAにログオンしているユーザー1で実行したところクライアントBのユーザー1プロファイルのプリンタ一覧を取得してしまい、ユーザー2のプリンタ一覧を取得してくれません。 なにか情報、方法ありましたらご教授ください。 よろしくお願いします。

  • あるユーザーのプロセスを終了するスクリプト

    あるユーザーのプロセスを終了するスクリプト お世話になっております。 VBSを使用してUser01が起動したJAVAプロセスを終了するスクリプトを作成する事を検討しています。 wmiを使って以下のようなコード(一部抜粋)を書くと、プロセスは終了できるのですが、 これからどうやってユーザを特定させるのかわかりません。 Set objProcessList = objWmiService.ExecQuery("Select * From Win32_Process where Caption = 'java.exe'") 'javaのプロセスを全部殺す For Each objProcess In objProcessList   result = objProcess.Terminate   If result <> 0 Then   msgbox "エラー" End IF Next アドバイスをお願いします。

  • vbsでDNSサフィックスの変更をするには

    今、WMIのメソッドを使用して DNSサフィックスを変更するVBSを作成しているのですが なぜか「行10、文字3が無効なメソッドです」って エラーになってしまいます。 運用の環境なので変にランタイムなども入れられないため VBSを選択し、IP変更やコンピュータ名変更なんかは できたのですが、DNSサフィックスがどうしてもうまくいきません。 メソッドもwbemtest.exeにて調べたので無いことも無いと 思うのですが。。。 どなたかわかる方いらっしゃいましたら 教えていただけないでしょうか。お願いします。 **ここからがソースです**** strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNIC = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled=true") arrDNSSuffixes = Array("domain1.local", "domain2.local") For each objNIC in colNIC objNIC.SetDNSSuffixSearchOrder(arrDNSSuffixes) NEXT **ここまでがソースです****

  • 下記内容のスクリプトを実行すると、ポップアップが

    下記内容のスクリプトを実行すると、ポップアップが 5回表示されるのですが、どこから取ってきた値なのか知りたいです。 ※必要なのは4回目に表示されるデスクトッププロパティから  参照できる”スクリーンセーバーの待ち時間”だけです。  出来れば、それのみ表示させたいです。 ****************** On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop") For Each objItem in colItems Wscript.Echo "ScreenSaverTimeout: " & objItem.ScreenSaverTimeout Next ****************** 以上

  • WSHについて教えてください。

    WSHについて教えてください。 コレクションの最初の要素(オブジェクト)のプロパティを参照したいのですが、やり方がわかりません。 例えば以下のようなWMIのクエリの結果のコレクションの要素(オブジェクト)は1つだけしかありません。 ※ネットワークドライブ V: の情報を得る strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkConnection where LocalName=""V:""",,48) なのにわざわざ For Each objItem in colItems Wscript.Echo "LocalName: " & objItem.LocalName Next のような表現をするのは、いかにも大変です。 For Eachを使わずに、上記の例での colItems の最初の要素(オブジェクト)の LocalName プロパティを取り出すには どのようにコーディングすればいいのでしょうか?

  • WMIによるネットワーク接続の有効無効化方法

    WMIによるネットワーク接続の有効無効化方法がわからないため 下記VBScriptの「Array("192.168.9.999")」の部分のIPアドレスを 有効化のVBScriptには割り当てているアドレスを 無効化のVBScriptにはでたらめなアドレスを設定し 有効無効化らしきことを実現させています。 実際にはネットワーク接続は有効のままでネットワークアドレスが ちがうために接続できないだけです。 どなたか有効無効化(IPEnabledをTRUEorFALSEにするMethod)方法を 教えていただけないでしょうか? strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") strIPAddress = Array("192.168.9.999") strSubnetMask = Array("255.255.255.0") For Each objNetAdapter in colNetAdapters errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask) If errEnable = 0 Then WScript.Echo "The IP address has been changed." Else WScript.Echo "The IP address could not be changed." End If Next

  • シャットダウンスクリプトの記述

    ドメインに参加している WinXP クライアントから、ワークグループ環境の複数台の Windows Server 2003 (主に) に対して ping を実行し、ping に対して応答があった場合はシャットダウンするスクリプトを記述したいと考えています。 # ワークグループ環境の Windows Server 2003 は検証環境で、社内セキュリティポリシーの運用上ドメインに参加できません。 この場合、 1. 複数のマシンに ping を打つ 2. 1 で応答がかえってくれば管理者の資格情報を使用してログイン 3. シャットダウンを実行 という流れになると思います。 そして、最終的には 1 が成功した場合に If 構文で 2、および、3 を実行する、という ように書けば一連の処理は成功すると考えています。 現在上記 1~3 の処理で細分化し、それぞれについて動作確認をとっています。 しかし、2、および、3 を実行してもうまくいかないため、これらについて伺いたく 質問させていただきます。 2 について 以下の構文を組んでいますが、vbs を実行すると、後述のエラーダイアログが表示されます (対象 PC やアカウント名などはダミーとご認識ください)。 別の資格情報 (接続先マシンの管理者アカウント) を指定して接続できるコードをご教授ください。 ----- Const WbemAuthenticationLevelPktPrivacy = 6 strComputer = "atl-ws-01" strNamespace = "root\cimv2" strUser = "Administrator" strPassword = "4rTGh2#1" Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy Set colItems = objWMIService.ExecQuery ("Select * From Win32_OperatingSystem") For Each objItem in ColItems Wscript.Echo strComputer & ": " & objItem.Caption Next ----- エラー : RPC サーバーを利用できません。 コード : 800706BA ソース : SWbemLocator 3 について 以下の構文を組んでいますが、エラーは表示されないものの、シャットダウンが開始されません。 ----- On error resume Next Const LogOff = 0 'ログオフ Const REBOOT = 2 '再起動 Const SHUTDOWN = 8 'シャットダウン Dim objWMIService Dim colOperatingSystems Dim objOperatingSystem Set objWMIService = GetObject("winmgmts:{impersonationLevel= impersonate,(Shutdown)}\\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems objOperatingSystem.Win32Shutdown(SHUTDOWN) Next Set objWMIService = Nothing Set colOperatingSystems = Nothing Call ErrorCheck End Function ----- また、試しに objNetwork.MapNetworkDrive を使用してサーバーの IPC$ に接続しログインした後に上記処理を試行しましたが、 シャットダウンが進みませんでした。 何卒よろしくお願いいたします。

  • WSH/VBScript DHCPの有効設定について

    お世話になっております。 毎度お手数をお掛けしていますが、よろしくお願いいたします。 WSHにてDHCPの有効設定を行ったところ、 WindowsVistaで以下の通り実行すると DHCPは有効になりますが、Staticで設定していたデフォルトゲートウェイのアドレスが残ってしまいます。 WindowsXPで実行するとデフォルトゲートウェイのアドレスは削除されます。 デフォルトゲートウェイの値を削除する方法をお願いいたします。 '----------------------------------- strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\"" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery(_ "SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'" For Each objItem in colItems if objItem.EnableDHCP = False then Return = objItem.EnableDHCP end if Next '----------------------------------- 上記に以下を追加してみましたが正常に動作しませんでした。 arrGateways = Array(Null) objItem.SetGateways(arrGateways) 以上、よろしくお願いいたします。

  • VBSについて教えてください。

    VBSについて教えてください。 イベントビューワのプロパティの変更(最大ログサイズとログサイズが最大値に達した時の操作)を以下のスクリプトにて変更したいと思っています。(スクリプトはhttp://www.microsoft.com/japan/technet/scriptcenter/scripts/logs/eventlog/lgevvb16.mspxで公開されているのを利用しています。) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate,(Security)}!\\" & _ strComputer & "\root\cimv2") Set colLogFiles = objWMIService.ExecQuery _ ("Select * from Win32_NTEventLogFile") For each objLogfile in colLogFiles strLogFileName = objLogfile.Name Set wmiSWbemObject = GetObject _ ("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2:" _ & "Win32_NTEventlogFile.Name='" & strLogFileName & "'") wmiSWbemObject.MaxFileSize = 1024000 wmiSWbemObject.OverwriteOutdated = 0 wmiSWbemObject.Put_ Next WindowsXPSP2では動作したのですが、Windows2000SP4では以下のエラーが発生します。 Windows Script Host スクリプト:スクリプトの場所 行:14 文字:5 エラー:WBEM_FLAG_USE_AMENDED_QUALIFIERSが指定されていない場合は修正オブジェクトを置くことはできません コード:80041066 ソース:SWbemObject VBSについては全く理解できておりません。 Windows2000で動作させるためにんはどこを修正すればいいでしょうか?

  • VBScript(WHS)でWMIを使ってリモートでvbsファイルを実行したい

    サーバAから、サーバBに置いてあるvbsファイル(Apache停止が書かれている)を実行して、サーバBのApacheを停止したいのですが、うまくいきません。 サーバBで単体でそのvbsファイルを実行すると、Apacheは正常に停止します。  戻り値は、0(プロセス完了)が帰ってきていて、接続はうまくいっているようなのですが、vbsファイルが実行されていないようです。  非常に困っておりまして、どなたか教えていただけないでしょうか? vbsファイルの実行のところが間違っているのかなと思うのですが・・・(今まだ会社にいないので、会社でのソースそのままではないですが、同じような感じです) -------------------------------------------- Option Explicit Dim strComputer Dim strUser Dim strPassword Dim strBAT ' ----------------------------------- ' 環境設定 ' ----------------------------------- strComputer = "サーバーB" strUser = "username" strPassword = "password" strBAT = "c:\hoge.bat" ' ----------------------------------- ' コマンド実行 ' ----------------------------------- Dim objWbemLocator Dim objWMIService Dim objWin32_Process Dim errReturn Dim intProcessID Const WbemAuthenticationLevelPktPrivacy = 6 ' リモートに接続 Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objwbemLocator.ConnectServer _ (strComputer, "root\cimv2", strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy ' Win32_Process クラスを生成 Set objWin32_Process = objWMIService.Get("Win32_Process") errReturn = objWin32_Process.Create _ ("cmd.exe /cscript C:\tmp\ApacheStop.vbs", Null, Null, intProcessID) WScript.Quit(errReturn ) もともとの要件は、機能ごとに分けたvbsファイル(Apache停止、Windows再起動、ファイルバックアップなど)を、各サーバで実行するというものです。その制御は、ひとつのバックアップサーバーで行います。