質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

1回答

1546閲覧

C#からWin10のPowershellコマンドレットでネットワークアダプタの設定をしたい

mitts

総合スコア17

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2017/09/12 05:21

編集2017/09/12 05:23

###前提・実現したいこと
Win10のC#のPowershellコマンドレットでネットワーク関連の設定の設定をしたい
具体的には以下の設定をpowershellで行いたい
・有線ネットワークアダプタ
自動/固定IPアドレス
自動/固定DNSアドレス
・無線ネットワークアダプタ
自動/固定IPアドレス
自動/固定DNSアドレス

①IP DNSともに自動設定の状態でIP DNSに固定の値を設定する
②IP DNSともに固定設定された状態で IP DNSを自動設定に切り替える

結果
① 有線ネットワーク
→ 全て固定IPに変更されました
無線ネットワーク
→DHCPのままでした。(デフォルトゲートウェイだけは値が入力されている)

② 有線ネットワーク
-> IPはDHCPに変更されましたが、DNSは固定のままでした
無線ネットワーク
-> 変更されていない感じです(デフォルトゲートウェイが入力されたまま)

正常に動作しない場合は以下のエラーがPowershellのReturnvalueに帰ってきています
解決方法をご教授頂ければありがたいです
###発生している問題・エラーメッセージ
Return value 84 (IP not enabled on adapter)

###該当のソースコード

C#

1class Program 2 { 3 const string NIC_NAME = "アダプタ名"; 4 static void Main(string[] args) 5 { 6 foreach (NetworkInterface nic_ in NetworkInterface.GetAllNetworkInterfaces()) 7 { 8 if (nic_.Description == NIC_NAME) 9 { 10 using (Runspace rs = RunspaceFactory.CreateRunspace()) 11 { 12 // Runspace をオープンする 13 rs.Open(); 14 15 using (PowerShell ps = PowerShell.Create()) 16 { 17 PSCommand pscmd = new PSCommand(); 18 19 string script1_ = "$nic = Get-WmiObject Win32_NetworkAdapterConfiguration | ?{$_.description -match \"" + nic_.Description + "\"}"; 20 pscmd.AddScript(script1_); 21 string command_ = args[0] != null ? args[0] : ""; 22 switch (command_.ToLower()) 23 { 24 case "staticip": 25 { 26 string script2_ = "$nic.EnableStatic(\"" + args[1] + "\",\"" + args[2] + "\")"; 27 pscmd.AddScript(script2_); 28 string script3_ = "$nic.SetGateways(\"" + args[3] + "\",1)"; 29 pscmd.AddScript(script3_); 30 } 31 break; 32 case "dhcpip": 33 { 34 string script2_ = "$nic.EnableDHCP()"; 35 pscmd.AddScript(script2_); 36 } 37 break; 38 case "dns": 39 { 40 string script2_ = "$nic.SetDNSServerSearchOrder(@(\"" + args[1] + "\",\"" + args[2] + "\"))"; 41 pscmd.AddScript(script2_); 42 } 43 break; 44 case "dhcpdns": 45 { 46 string script2_ = "$nic.SetDNSServerSearchOrder()"; 47 pscmd.AddScript(script2_); 48 } 49 break; 50 } 51 ps.Commands = pscmd; 52 ps.Runspace = rs; 53 // スクリプトを実行する 54 Collection<PSObject> adapts = ps.Invoke(); 55 } 56 } 57 } 58 } 59 } 60 }

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

C#で作成したアプリから、PowerShellコマンドレットを実行させて、ネットワークアダプターの設定を行いたい…ってことかな。
ネットワークアダプターの情報をGet-WMIObjectコマンドレットで取得しているけど、Win10にはネットワーク関連のコマンドレット群が用意されているので、そちらを使った方が良いんじゃないかな。
"Get-Command -Net"で調べると、ちょっと幸せになれるかもしれません。

投稿2017/09/14 14:02

Takeda_Kazuhito

総合スコア369

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問