IT プロフェッショナルのための技術情報サイト >
フォーラム ホーム
>
Windows Powershell フォーラム
>
Windows PowerShell
>
ネットワークアダプターの有効・無効の切り替え
ネットワークアダプターの有効・無効の切り替え
- お世話になります。
ネットワークアダプターの有効・無効の切り替えを行いたいのですが、
わかりません。
$nic = gwmi -Query "select * from win32_networkadapter where servicename ='****'"
$nic.Reset()
Reset関数がエラーとなります。
VISTAのwin32_networkadapterクラスには、「Enable、Disable」メソッドがあるらしいのですが・・・・
方法があれば教えてください。
回答
- ローカルエリア接続とかの単位でいいなら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() }- 回答としてマークTAKAKUN 2009年4月7日 1:16
すべての返信
こんにちは
現在手元に環境がないので試していませんが
$nic.Disable() と $nic.Enable() は使用できませんか?- http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx
ここによると、ResetはNot Implemenedとなっています。
HIROさんがおっさはられている、Disable、Enableで有効、無効の切り替えができることを確認しました。
ちなみに、VISTAの場合、管理者権限で動かす必要があります。
http://techbank.jp/nora/(SQL Serverを中心に情報発信中) - >野良さん
検証ありがとうございました。 ご返事ありがとうございます。
済みません、プラットフォームを書き忘れていました。
WindowsXPです。
確かにVISTAでは動作しますが、XPではこのようなメソッドはないので
どのようにしたらという質問です。
申し訳ないです。
XPでは可能ですか?- Enable()とDisable()はXPでは使用できないので、win32_networkadapter を使用しての変更は無理かもしれません。
代わりに netsh というコマンドをPowerShellで使用するというのはどうでしょうか?
(申し訳ないのですが詳しい使用方法までは調べておりません)
こちらはXPもサポートしているようです。 ご返事ありがとうございます。
netsh無理っぽいです。
コマンド的には、下記の方法で行うらしいですが、Windows2003のみが利用可能で
Xpでは、そんなコマンドはないとおこられます。
netsh interface set interface "ローカル エリア接続" disable
CUIでは、なにかと制限がありますね。
これからでしょうか?- ローカルエリア接続とかの単位でいいなら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() }- 回答としてマークTAKAKUN 2009年4月7日 1:16
ご返事ありがとうございます。
Shell.Applicationを使用することで可能となりました。
ありがとうございました。
だた一つS.K.さんの記述された内容で理解ができない部分があったので
教えてください。
if ( $disable = $lan.Verbs() | ? { $_.Name -eq "無効にする(&B)" } ) { $disable.DoIt() }
パイプへのオブジェクトへの流れ方なんですが、左辺値のコマンド結果を配列オブジェクトに格納して
流れていくイメージを持っていたので、このような記述ができるとは思いませんでした。
この場合、パイプへの流れ方はどのようなイメージとなるのでしょうか。
教えてください。- 一行で済ませたほうが自分にとって見やすいのではしょって書いてます、すみません
パイプ演算子は代入演算子より優先度が高いので
$lan.Verbs() | ? { $_.Name -eq "無効にする(&B)" }
がまず評価され、その結果の出力が変数に代入されます(出力がない場合は $null です)
後はif文なので () の中の式を評価して(intに型変換して)0でないなら次の文を実行、ですね ご返事ありがとうございます。
勉強になりました。
演算子の優先順位まで考えてなかったです。
ありがとうございました。

