タグ
  ANSI (1)
  ASP.NET (10)
  Active Directory (55)
  BAT (16)
  Backup (2)
  CSharp (11)
  CentOS (4)
  C言語 (4)
  DNS (4)
  Excel (3)
  FFmpeg (1)
  Fedora (4)
  FreeBSD (6)
  IPv6 (3)
  Java (11)
  JavaScript (8)
  LAN (1)
  Link (4)
  Linux (15)
  Mac (1)
  Mail (2)
  Microsoft (3)
  NIS (1)
  Node.js (6)
  OpenIndiana (1)
  OpenLDAP (2)
  OpenSSL (1)
  OpenSolaris (4)
  PHP (2)
  Perl (2)
  Postfix (1)
  PostgreSQL (2)
  PowerShell (34)
  RFC (3)
  SQL Server (5)
  Solaris (10)
  Ubuntu (9)
  VBScript (73)
  VCpp (2)
  VMware (3)
  Visual Basic (1)
  WMI (17)
  WSF (5)
  WSH (10)
  Windows (19)
  bash (1)
  bind (1)
  iSCSI (1)
  おまけ (3)
  作成中 (8)
  慣用句 (3)
  正規表現 (6)
  運用 (8)
作成 2010.02.19
更新 2010.02.19
MSGコマンドを使ってクライアント端末にポップアップを表示する
使用上の注意
以下の制限があります。
  • 対象はドメインのメンバーコンピューターのみ
  • 管理者権限が必要
  • ファイアウォールを開ける必要がある
    以下のグループポリシーを追加します。
    Windows Vista, 7の場合
    コンピューターの構成/ポリシー/Windows の設定/セキュリティの設定/セキュリティが強化された Windows ファイアウォール/セキュリティが強化された Windows ファイアウォール - LDAP://(略)/受信の規則/
    新規作成して、リモートサービス管理をあける
    Windows XPの場合
    コンピューターの構成/ポリシー/管理用テンプレート/ネットワーク/ネットワーク接続/Windows ファイアウォール/ドメイン プロファイル/
    Windows ファイアウォール: 着信リモート管理の例外を許可する
  • 送信者が表示されない
    Windows XP の場合はログオン画面の時、Windows Vista, 7 の場合は常に送信者が表示されません。
    事情を知らない人へ突然送ったら驚かれると思うのでいたずらはやめましょう。
    ドメイン コントローラーへの匿名アクセスを許可することで、たぶんいけるとは思いますが危険なのでおすすめしません。
  • Windows 2000 は非対応
コード
pc1, pc2 へメッセージを送信します。
Option Explicit

' Win32_ProcessStartup ShowWindow
Const SW_NORMAL = 1
Const SW_SHOWNOACTIVATE = 4
Const SW_MINIMIZE = 6

SendMessage "pc1","test message"
SendMessage "pc2","test message"

Sub SendMessage(TargetComputer, strMessage)
  Dim objWMIService, objStartup, objConfig
  Dim objProcess, strCommand, intProcessID, intReturn
  Set objWMIService = GetObject("winmgmts:\\" & TargetComputer & "\root\cimv2")
  Set objStartup = objWMIService.Get("Win32_ProcessStartup")
  Set objConfig = objStartup.SpawnInstance_
  objConfig.ShowWindow = SW_SHOWNOACTIVATE
  Set objProcess = objWMIService.Get("Win32_Process")
  strCommand = "msg * """ & strMessage & """"
  intReturn = objProcess.Create (strCommand, Null, objConfig, intProcessID)
  If intReturn = 0 Then
    WScript.Echo TargetComputer & ":ok"
  Else
    WScript.Echo TargetComputer & ":FAIL"
  End If
End Sub
補足
  • 管理者権限で実行しなかったときに出るエラー
  • Microsoft VBScript 実行時エラー: 書き込みできません。: 'GetObject'
    
  • マシンが停止しているか、ファイアウォールでブロックされている時に出るエラー
  • Microsoft VBScript 実行時エラー: リモート サーバ マシンが存在しないか、利用できません。: 'GetObject'
    
    Windows XP のには「ドメイン プロファイル」と「標準プロファイル」があります。 現在どちらのプロファイルを参照しているか確認するには、以下のコマンドを実行します。 実行結果の上段の「プロファイル」と記載されている行です。
    また、パーソナル ファイアウォールが動作していないか確認してみてください。
    netsh firewall show state
    
    Windows 7, Vista は以下のコマンドで。
    netsh advfirewall show currentprofile
    
タグ: VBScript WMI
[リロード] [記事修正] [新規作成] [使用方法]
©2004-2012 UPKEN IPv4