可以使用 PowerShell 脚本来根据给定的 MAC 地址从 .ini 文件中读取配置,并设置计算机名以及 IP 地址。下面是一个示例 PowerShell 脚本,它会读取一个 .ini 文件,根据指定的 MAC 地址,设置计算机名、IPv4 地址以及 DNS 配置。

可以使用 PowerShell 脚本来根据给定的 MAC 地址从 .ini 文件中读取配置,并设置计算机名以及 IP 地址。下面是一个示例 PowerShell 脚本,它会读取一个 .ini 文件,根据指定的 MAC 地址,设置计算机名、IPv4 地址以及 DNS 配置。

1. INI 文件格式 (mac_addresses.ini)

iniCopy Code
[Device1]
MAC=00:11:22:33:44:55
COMPUTER_NAME=Computer_1
IPV4=192.168.1.101
DNS1=223.5.5.5
DNS2=119.29.29.29

[Device2]
MAC=66:77:88:99:00:11
COMPUTER_NAME=Computer_2
IPV4=192.168.1.102
DNS1=223.5.5.5
DNS2=119.29.29.29

2. PowerShell 脚本 (set-network-config.ps1)

powershellCopy Code
# PowerShell 脚本,基于 MAC 地址设置计算机名和 IP 配置

# 读取 INI 文件路径
$iniFile = "mac_addresses.ini"

# 检查是否传入 MAC 地址
if ($args.Length -eq 0) {
    Write-Host "错误: 请提供一个 MAC 地址作为参数!"
    exit
}

# 获取当前传入的 MAC 地址
$currentMac = $args[0]

# 读取 INI 文件并转换为哈希表
function Get-IniContent {
    param(
        [string]$filePath
    )
    $iniContent = @{}
    $section = ""
    foreach ($line in Get-Content -Path $filePath) {
        $line = $line.Trim()
        # 忽略空行和注释
        if ($line -match "^\s*(#|;|\[.*\])") {
            continue
        }
        # 检测区段头 [Section]
        if ($line -match "^\[(.*)\]") {
            $section = $matches[1].Trim()
            $iniContent[$section] = @{}
        } elseif ($line -match "^\s*(\S+)\s*=\s*(\S+)\s*$") {
            # 获取键值对
            $key = $matches[1].Trim()
            $value = $matches[2].Trim()
            if ($section) {
                $iniContent[$section][$key] = $value
            }
        }
    }
    return $iniContent
}

# 读取 INI 文件内容
$iniData = Get-IniContent -filePath $iniFile

# 查找与给定 MAC 地址对应的设备配置
$deviceConfig = $null
foreach ($section in $iniData.Keys) {
    if ($iniData[$section]["MAC"] -eq $currentMac) {
        $deviceConfig = $iniData[$section]
        break
    }
}

# 如果找不到匹配的 MAC 地址
if ($deviceConfig -eq $null) {
    Write-Host "未找到与 MAC 地址 $currentMac 匹配的设备配置."
    exit
}

# 提取配置项
$computerName = $deviceConfig["COMPUTER_NAME"]
$ipv4Address = $deviceConfig["IPV4"]
$dns1 = $deviceConfig["DNS1"]
$dns2 = $deviceConfig["DNS2"]

Write-Host "正在设置计算机名为: $computerName"
Write-Host "正在设置 IPv4 地址为: $ipv4Address"
Write-Host "正在设置 DNS1 为: $dns1"
Write-Host "正在设置 DNS2 为: $dns2"

# 设置计算机名
Rename-Computer -NewName $computerName -Force -Restart

# 设置 IPv4 地址
$interfaceName = "以太网"  # 根据你的网络接口名称修改
Write-Host "正在配置 IPv4 地址..."
New-NetIPAddress -InterfaceAlias $interfaceName -IPAddress $ipv4Address -PrefixLength 24 -DefaultGateway "192.168.1.1"

# 设置 DNS
Write-Host "正在配置 DNS 地址..."
Set-DnsClientServerAddress -InterfaceAlias $interfaceName -ServerAddresses ($dns1, $dns2)

Write-Host "网络配置已完成!"

# 等待一会儿再完成脚本
Start-Sleep -Seconds 5

3. 使用说明

  1. INI 文件:

    • 在 mac_addresses.ini 文件中,定义每个设备的 MAC 地址、计算机名、IPv4 地址和 DNS 配置。每个设备的配置都包含一个区段,如 [Device1] 或 [Device2]
    • 配置文件中的每个设备的 MAC 地址需要与 PowerShell 脚本运行时提供的 MAC 地址匹配。
  2. PowerShell 脚本:

    • 使用此 PowerShell 脚本时,您需要在命令行中传入一个 MAC 地址作为参数。

    示例命令:

    powershellCopy Code
    .\set-network-config.ps1 00:11:22:33:44:55

    脚本将根据给定的 MAC 地址从 mac_addresses.ini 文件中读取相应的配置,并设置计算机名、IPv4 地址和 DNS 地址。

  3. 脚本解释:

    • Get-IniContent 函数用于解析 INI 文件并将其转换为哈希表结构,便于快速查找对应的配置。
    • Rename-Computer 用于设置计算机名,并强制重启以应用更改。
    • New-NetIPAddress 用于设置静态的 IPv4 地址。
    • Set-DnsClientServerAddress 用于配置 DNS 服务器地址。
  4. 注意事项:

    • 网络接口名称(例如 "以太网")需要根据系统的实际网络接口名称进行调整。
    • 由于设置计算机名会导致计算机重启,脚本执行时会自动重启计算机。
    • 运行此脚本需要管理员权限。
  5. IP 地址配置:

    • New-NetIPAddress 设置的 PrefixLength 默认使用 24,表示子网掩码为 255.255.255.0,您可以根据需要调整它。
    • 默认网关(DefaultGateway)在脚本中设定为 192.168.1.1,您可以根据网络环境修改。

 

这个 PowerShell 脚本可以根据传入的 MAC 地址从 .ini 文件中读取设备配置信息,并设置计算机名、IPv4 地址和 DNS 配置。确保以管理员权限运行此脚本,以便它能够正确地修改计算机的网络设置。


 

posted @ 2025-04-10 17:52  suv789  阅读(105)  评论(0)    收藏  举报