Risorse per professionisti IT > Home page del forum > Windows PowerShell > ネットワークアダプターの有効・無効の切り替え
Formula una domandaFormula una domanda
 

Con rispostaネットワークアダプターの有効・無効の切り替え

  • venerdì 3 aprile 2009 1.19TAKAKUN Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     
    お世話になります。

    ネットワークアダプターの有効・無効の切り替えを行いたいのですが、
    わかりません。

    $nic = gwmi -Query "select * from win32_networkadapter where servicename ='****'"
    $nic.Reset()
    Reset関数がエラーとなります。

    VISTAのwin32_networkadapterクラスには、「Enable、Disable」メソッドがあるらしいのですが・・・・

    方法があれば教えてください。

Risposte

  • lunedì 6 aprile 2009 15.10S.K. Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     Con risposta
    ローカルエリア接続とかの単位でいいならXPでもこれで切り替えられると思います

    $sh = New-Object -ComObject Shell.Application
    $nc = $sh.NameSpace(3).Items() | ? { $_.Name -eq "ネットワーク接続" }
    $lan = $nc.GetFolder.Items() | ? { $_.Name -eq "ローカル エリア接続" }
    if ( $disable = $lan.Verbs() | ? { $_.Name -eq "無効にする(&B)" } ) { $disable.DoIt() }
    else if ( $enable = $lan.Verbs() | ? { $_.Name -eq  "有効にする(&A)" } ) { $enable.DoIt() }
    • Contrassegnato come rispostaTAKAKUN martedì 7 aprile 2009 1.16
    •  

Tutte le risposte

  • venerdì 3 aprile 2009 2.48HIROsDotNetMVPMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     

    こんにちは

    現在手元に環境がないので試していませんが

    $nic.Disable() と $nic.Enable() は使用できませんか?

  • venerdì 3 aprile 2009 15.28野良 Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     
    http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx

    ここによると、ResetはNot Implemenedとなっています。
    HIROさんがおっさはられている、Disable、Enableで有効、無効の切り替えができることを確認しました。

    ちなみに、VISTAの場合、管理者権限で動かす必要があります。
    http://techbank.jp/nora/(SQL Serverを中心に情報発信中)
  • venerdì 3 aprile 2009 15.32HIROsDotNetMVPMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     
    >野良さん
    検証ありがとうございました。
  • lunedì 6 aprile 2009 1.03TAKAKUN Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     

    ご返事ありがとうございます。

    済みません、プラットフォームを書き忘れていました。

    WindowsXPです。

    確かにVISTAでは動作しますが、XPではこのようなメソッドはないので
    どのようにしたらという質問です。

    申し訳ないです。

    XPでは可能ですか?

  • lunedì 6 aprile 2009 4.14HIROsDotNetMVPMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     
    Enable()とDisable()はXPでは使用できないので、win32_networkadapter を使用しての変更は無理かもしれません。

    代わりに netsh というコマンドをPowerShellで使用するというのはどうでしょうか?
    (申し訳ないのですが詳しい使用方法までは調べておりません)

    こちらはXPもサポートしているようです。

  • lunedì 6 aprile 2009 10.16TAKAKUN Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     

    ご返事ありがとうございます。

    netsh無理っぽいです。

    コマンド的には、下記の方法で行うらしいですが、Windows2003のみが利用可能で
    Xpでは、そんなコマンドはないとおこられます。

    netsh interface set interface "ローカル エリア接続" disable

    CUIでは、なにかと制限がありますね。
    これからでしょうか?

  • lunedì 6 aprile 2009 15.10S.K. Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     Con risposta
    ローカルエリア接続とかの単位でいいならXPでもこれで切り替えられると思います

    $sh = New-Object -ComObject Shell.Application
    $nc = $sh.NameSpace(3).Items() | ? { $_.Name -eq "ネットワーク接続" }
    $lan = $nc.GetFolder.Items() | ? { $_.Name -eq "ローカル エリア接続" }
    if ( $disable = $lan.Verbs() | ? { $_.Name -eq "無効にする(&B)" } ) { $disable.DoIt() }
    else if ( $enable = $lan.Verbs() | ? { $_.Name -eq  "有効にする(&A)" } ) { $enable.DoIt() }
    • Contrassegnato come rispostaTAKAKUN martedì 7 aprile 2009 1.16
    •  
  • martedì 7 aprile 2009 1.10TAKAKUN Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     

    ご返事ありがとうございます。

    Shell.Applicationを使用することで可能となりました。
    ありがとうございました。

    だた一つS.K.さんの記述された内容で理解ができない部分があったので
    教えてください。

    if ( $disable = $lan.Verbs() | ? { $_.Name -eq "無効にする(&B)" } ) { $disable.DoIt() }

    パイプへのオブジェクトへの流れ方なんですが、左辺値のコマンド結果を配列オブジェクトに格納して
    流れていくイメージを持っていたので、このような記述ができるとは思いませんでした。

    この場合、パイプへの流れ方はどのようなイメージとなるのでしょうか。
    教えてください。


  • martedì 7 aprile 2009 9.37S.K. Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     
    一行で済ませたほうが自分にとって見やすいのではしょって書いてます、すみません
    パイプ演算子は代入演算子より優先度が高いので
     $lan.Verbs() | ? { $_.Name -eq "無効にする(&B)" }
    がまず評価され、その結果の出力が変数に代入されます(出力がない場合は $null です)
    後はif文なので () の中の式を評価して(intに型変換して)0でないなら次の文を実行、ですね
  • mercoledì 8 aprile 2009 2.09TAKAKUN Medaglie utenteMedaglie utenteMedaglie utenteMedaglie utenteMedaglie utente
     

    ご返事ありがとうございます。

    勉強になりました。
    演算子の優先順位まで考えてなかったです。

    ありがとうございました。