2025年3月 ホームページを更新しました。

Windows11、10で現場でIP設定変更が面倒になってきた

お客様のところに行って、IPを設定する際に、特にWindows11が面倒になってきた。(設定クリックして、その中の~~~って感じで入っていくのが面倒)

そこで、バッチか、Powershellのスクリプトでいいじゃん!って思ったけど、バッチはnetshコマンドでやればいいからよいとして、Powershellスクリプトでメニュー形式にできれば楽だな~~って思ったら・・・・・

LANケーブルが刺さっているか、WI-FI接続ずみでないと、設定が変更できないことが判明(2025/7/29)

自分のPCでは、お客様のところで、IPを設定してからしか接続できないので、このままでは使えない!!! って思っちゃいました。

そ今まだ、ケーブルを刺さないで設定変更のスクリプトは検証中ですが、LANケーブルを刺した状態でのIPの設定変更ができるPowerShellスクリプト5が動作したので、下記の記載します。

ただ動かなかったらすいませんm(__)m。Windows10では確認しました。

# PowerShell 5対応 - NIC初期化+静的/DHCP再設定ツール ケーブル接続済み前提

function Show-NICMenu {
    $nics = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' -or $_.Status -eq 'Disconnected' }

    if (-not $nics -or $nics.Count -eq 0) {
        Write-Host "NICが見つかりません。" -ForegroundColor Red
        exit 1
    }

    Write-Host "===== 使用可能なNIC一覧 =====" -ForegroundColor Cyan
    for ($i = 0; $i -lt $nics.Count; $i++) {
        Write-Host "[$i] Name: $($nics[$i].Name), Status: $($nics[$i].Status), Mac: $($nics[$i].MacAddress)"
    }

    do {
        $selection = Read-Host "番号を入力してください(0〜$($nics.Count - 1))"
    } while (-not ($selection -match '^\d+$') -or $selection -ge $nics.Count)

    return $nics[$selection].Name
}

function Clear-IPv4Config {
    param([string]$nicName)

    Write-Host "`n--- [$nicName] のIP/GW/DNS設定を削除します ---" -ForegroundColor Yellow

    # IP削除
    Get-NetIPAddress -InterfaceAlias $nicName -AddressFamily IPv4 -ErrorAction SilentlyContinue |
        Remove-NetIPAddress -Confirm:$false -ErrorAction SilentlyContinue

    # GW削除
    Get-NetRoute -InterfaceAlias $nicName -DestinationPrefix "0.0.0.0/0" -ErrorAction SilentlyContinue |
        Remove-NetRoute -Confirm:$false -ErrorAction SilentlyContinue

    # DNSリセット
    Set-DnsClientServerAddress -InterfaceAlias $nicName -Reset -ErrorAction SilentlyContinue

    # DHCP無効化(←重要) → 反映されるまで待機(最大10秒)
    Set-NetIPInterface -InterfaceAlias $nicName -Dhcp Disabled -ErrorAction SilentlyContinue

    $waitTime = 0
    while ((Get-NetIPInterface -InterfaceAlias $nicName).Dhcp -ne "Disabled" -and $waitTime -lt 10) {
        Start-Sleep -Seconds 1
        $waitTime++
    }

    if ((Get-NetIPInterface -InterfaceAlias $nicName).Dhcp -ne "Disabled") {
        Write-Host "⚠ DHCPの無効化に失敗した可能性があります。" -ForegroundColor Red
    } else {
        Write-Host "✔ 初期化完了(IP/GW/DNS削除 & DHCP無効化)" -ForegroundColor Green
    }
}

function Set-NICIP {
    param([string]$nicName)

    Write-Host "`n$nicName に設定を適用します。" -ForegroundColor Yellow
    $choice = Read-Host "DHCPに設定しますか?(y: DHCP / n: 静的IP)"

    if ($choice -eq 'y') {
        Write-Host "→ DHCPを有効に設定中..."
        Set-NetIPInterface -InterfaceAlias $nicName -Dhcp Enabled -ErrorAction SilentlyContinue
        Set-DnsClientServerAddress -InterfaceAlias $nicName -Reset
        Write-Host "✔ DHCP設定完了。" -ForegroundColor Green
    }
    elseif ($choice -eq 'n') {
        $ip   = Read-Host "IPアドレス(例: 192.168.1.100)"
        $mask = Read-Host "プレフィックス長(例: 24)"
        $gw   = Read-Host "ゲートウェイ(例: 192.168.1.1)"
        $dns  = Read-Host "DNS(カンマ区切り: 8.8.8.8,1.1.1.1)"

        Write-Host "→ 静的IPを設定中..."

        # DHCPがオフであることを確認(念のため)
        Set-NetIPInterface -InterfaceAlias $nicName -Dhcp Disabled -ErrorAction SilentlyContinue

        # 再チェックと待機(5秒以内に反映されなければ警告)
        $wait = 0
        while ((Get-NetIPInterface -InterfaceAlias $nicName).Dhcp -ne "Disabled" -and $wait -lt 5) {
            Start-Sleep -Seconds 1
            $wait++
        }

        # IP設定実行
        New-NetIPAddress -InterfaceAlias $nicName -IPAddress $ip -PrefixLength $mask -DefaultGateway $gw -ErrorAction Stop

        # DNS設定
        Set-DnsClientServerAddress -InterfaceAlias $nicName -ServerAddresses ($dns -split ",") -ErrorAction Stop

        Write-Host "✔ 静的IP設定完了。" -ForegroundColor Green
    }
    else {
        Write-Host "⚠ 無効な入力です(y または n を入力してください)" -ForegroundColor Red
    }
}

# === 実行開始 ===
Write-Host "`n=== NIC IP設定ツール(初期化+再設定)===" -ForegroundColor Cyan

$nicName = Show-NICMenu
if ($nicName) {
    Clear-IPv4Config -nicName $nicName
    Set-NICIP -nicName $nicName
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA