tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルネットワーク上の他PCのシャットダウン
記事No11857
投稿日: 2008/03/21(Fri) 21:19
投稿者でん
ネットワーク上の他のPCの電源をシャットダウン/リブートしたいのですが、
方法が分かりません。
ご教授お願い致します。

OS:Windows XP pro SP2
VB:VB6

[ツリー表示へ]
タイトルRe: ネットワーク上の他PCのシャットダウン
記事No11863
投稿日: 2008/03/24(Mon) 06:47
投稿者花ちゃん
> ネットワーク上の他のPCの電源をシャットダウン/リブートしたいのですが、
> 方法が分かりません。

もう少し具体的に何が解らないかを書かないとレスが付きませんよ。
http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban

そのような、環境ではないので試していませんが、操作先のPCに下記のような
アプリを入れておき、操作元のPCから起動したのではだめなのですか?
http://hanatyan.sakura.ne.jp/vbhlp/tap_winEnd.htm

[ツリー表示へ]
タイトルRe^2: ネットワーク上の他PCのシャットダウン
記事No11865
投稿日: 2008/03/24(Mon) 10:08
投稿者でん
説明が悪く申し訳ありません。

2台のPCにアプリケーションを入れ、リンクして動作するように
しているのですが、片方のアプリケーションが万が一ハングしてし
まった時のために、生存中のアプリケーションからハングしている
PCをアプリケーションを介さずOSからリブートまたはシャット
ダウンをかけたいと思っています。

・他のPCをアプリケーションを介さずOSからリブートまたは
 シャットダウンすることは可能でしょうか?

[ツリー表示へ]
タイトルRe^3: ネットワーク上の他PCのシャットダウン
記事No11866
投稿日: 2008/03/24(Mon) 10:28
投稿者花ちゃん
> 説明が悪く申し訳ありません。
余計意味が解らない!

> まった時のために、生存中のアプリケーションからハングしている
> PCをアプリケーションを介さずOSからリブートまたはシャット
> ダウンをかけたいと思っています。
>
> ・他のPCをアプリケーションを介さずOSからリブートまたは
>  シャットダウンすることは可能でしょうか?

他のPCをアプリケーションを介さずOSからリブート するとは具体的にどのような事を
指しているのでしょうか?
ソフトではだめなら、ハード的にという事ですか?
そう言ったフリーソフトは色々ありますのが、どのようなフリーソフトに該当しますか?

それに、最近のPCでは、ハングアップしてしまったら、まったく何も入力を受け付け
ないので、手動で電源を落とすしかないような気がしますが。
(# それより、ハングアップしないようにプログラムする事が先かと思いますが)

[ツリー表示へ]
タイトルRe^3: ネットワーク上の他PCのシャットダウン
記事No11869
投稿日: 2008/03/24(Mon) 14:53
投稿者魔界の仮面弁士
> ・他のPCをアプリケーションを介さずOSからリブートまたは
>  シャットダウンすることは可能でしょうか?

PC1 に、何か追加のソフトを入れること無く、
PC2 から、PC1 をシャットダウンしたい、という事ですよね。

そういったリモート制御には、WMI を使うのが良いでしょう。
Win32_OperatingSystem クラスのシャットダウン系メソッドを試してみてください。

 Shutdown() メソッド
  … 2008,2003,XP,2000,NT4/SP4

 Win32Shutdown(Flags, Reserved) メソッド
  … 2008,Vista,2003,XP,2000,NT4/SP4

 Win32ShutdownTracker(Timeout, Comment, ReasonCode, Flags) メソッド
  … 2008,Vista

# google や MSDN や TechNet 等を探せば、具体的なサンプルも見つかるかと。

[ツリー表示へ]
タイトルRe^4: ネットワーク上の他PCのシャットダウン
記事No11872
投稿日: 2008/03/24(Mon) 17:52
投稿者でん
> > ・他のPCをアプリケーションを介さずOSからリブートまたは
> >  シャットダウンすることは可能でしょうか?
>
> PC1 に、何か追加のソフトを入れること無く、
> PC2 から、PC1 をシャットダウンしたい、という事ですよね。

そうです。
分かりにくくて申し訳ありません。

> そういったリモート制御には、WMI を使うのが良いでしょう。
> Win32_OperatingSystem クラスのシャットダウン系メソッドを試してみてください。
>
>  Shutdown() メソッド
>   … 2008,2003,XP,2000,NT4/SP4
>
>  Win32Shutdown(Flags, Reserved) メソッド
>   … 2008,Vista,2003,XP,2000,NT4/SP4
>
>  Win32ShutdownTracker(Timeout, Comment, ReasonCode, Flags) メソッド
>   … 2008,Vista
>
> # google や MSDN や TechNet 等を探せば、具体的なサンプルも見つかるかと。

ありがとうございます。
探して、試してみたいと思います。

[ツリー表示へ]
タイトルRe^4: ネットワーク上の他PCのシャットダウン
記事No11881
投稿日: 2008/03/25(Tue) 12:04
投稿者でん
ありがとうございました。
いろいろ参考にして、下記のような関数を作成し実現することができました。

'/////////////////////////////////////////////////////////////////
'  [引数]
'    pComputerName :コンピュータ名 or IPアドレス
'    pUserName     :Administrator権限のユーザー名
'    pPassword     :ユーザーのパスワード
'    flg           :0:LogOff 1:Shutdown 2:Reboot 8:PowerOff
'  [戻り値]
'    0      :正常終了
'    1      :エラー
'/////////////////////////////////////////////////////////////////
Public Function RemoteShutdown(ByVal pComputerName As String, _
                ByVal pUserName As String, _
                               ByVal pPassword As String, _
                ByVal flg As Integer) As Integer

    Dim objOsSet As SWbemObjectSet
    Dim objOs As SWbemObject
    Dim objLocator As SWbemLocator
    Dim objService As Object
    
    On Local Error GoTo ErrorHandler:
    
    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(pComputerName, _
                       "root\cimv2", _
                       pUserName, _
                        pPassword)
    Set objOsSet = objService.ExecQuery("Select * From Win32_OperatingSystem")
    
    For Each objOs In objOsSet
        RemoteShutdown = objOs.Win32Shutdown(flg)
    Next
    
    Set objOsSet = Nothing
    Set objOs = Nothing
    Set objService = Nothing
    Set objLocator = Nothing
    
    Exit Function
    
ErrorHandler:
    Err.Clear
    RemoteShutdown = 1
    
    Set objOsSet = Nothing
    Set objOs = Nothing
    Set objService = Nothing
    Set objLocator = Nothing
    
End Function

[ツリー表示へ]