QA@IT

netshコマンドについて

7461 PV

社内のPCに対し、「netsh」コマンドバッチを作り、DNSの設定を一括で行おうと考えております。
(各社内PCへのバッチの配布は「Skysea」の配信機能にてWindowsのスタートアップに配置し、
OS起動とともにバッチ実行させるように設定します)

実施するバッチ内容は以下の通りです。

<実施バッチ内容>---------------------------------------------------------------------------------------
netsh interface ip set dns name="ローカル エリア接続" source=static addr=XXX.XXX.XX.X register=PRIMARY
netsh interface ip add dns name="ローカル エリア接続" addr=XXX.XXX.XX.X index=2
 ------------------------------------------------------------------------------------------------------

バッチ実施にあたり、以下のことを追加で実現したいのですが、可能でしょうか?

<実現したいこと>
1)ある特定のIPアドレス帯に対しては、「netsh」コマンドを実施しないようにしたい。
  例:192.168.14.XX のアドレスは「netsh」コマンドを実施しない。

2)上記netshコマンド内のネットワークアダプタは「name="ローカル エリア接続"」を
 指定しておりますが、「name="ローカル エリア接続"」だけではなく、
 全てのネットワークアダプタに対して、一括でDNSの設定を変更したい。
 (各ユーザーがメインで使用しているネットワークアダプタを把握していないため、
  ネットワークアダプタ名に関わらず一括でDNSの設定変更ができたらと考えております)

方法等は問いませんので、上記を実現するための案があればご教示頂けますでしょうか。

お手数をお掛けしますが、宜しくお願い致します。

回答

2) ipconfigコマンドで、全てのアダプターがリストアップされるので、そこから拾えばいいかと思います。

1) バッチを実行するPCのIPアドレスがこれこれであれば処理をやめるということなら、
同じくipconfigコマンドで自分のIPアドレスが拾えますので、それを見ればいいかと思います。

追記:
バッチスクリプトよりPowerShellでやる方がいい気がします。

編集 履歴 (1)
  • ご助言ありがとうございました。
    1) について、IPアドレスが2つ以上設定されている端末があり、以下コマンドでIPを取得しようとすると複数取得されてしまいます。
    -
  • [system.net.dns]::GetHostAddresses((hostname)) | where {$_.AddressFamily -eq "InterNetwork"} | select -ExpandPropert -
  • 上記間違えました。
    [system.net.dns]::GetHostAddresses((hostname)) | where {$_.AddressFamily -eq "InterNetwork"} | select -ExpandProperty IPAddressToString
    -
  • 後続の処理でIPアドレスどうしで比較したいため、1つずつIPアドレスを取得したいのですが、方法等はございますでしょうか?
    度々お手数をお掛けしますが宜しくお願い致します。
    -
  • PowerShellはあまり詳しくないので、アドバイスできませんが、そこまで出来ているのであれば、あとはPowerShellの使い方だけの話だと思います。 -
  • otn様 ご回答ありがとうございました。無事Powershellで対応できました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。