windows动态获取IP

时间:2015-03-23 17:47:27

标签: windows powershell batch-file ip

我想实现以下逻辑。是否可以使用批处理或电源shell实现此类实现?请与我分享脚本。

假设我有一个包含以下内容的配置文件" config.propertis":

BOOTPRORO=statis or dhcp
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS=8.8.8.8

我希望在启动时系统会检查该文件并相应地配置网络:

  1. 操作系统:Windows
  2. 如果在BOOTPROTO = dhcp中,则在网络配置中使用DHCP并忽略配置文件中的所有其他内容,DNS除外
  3. 如果在BOOTPROTO = static,则使用配置文件中的所有变量将IP配置为静态。
  4. 所以,我在Linus下有这样的逻辑,使用shell。该脚本在rc.d中配置并在网络服务之前执行。是否可以通过Windows实现此类功能?伙计们,请分享剧本!

2 个答案:

答案 0 :(得分:1)

在Windows中我们可以通过批处理文件或powershell脚本设置ip地址,但是当你使用dhcp地址时你的ip是动态不是静态我想要静态ip地址拼版 BAtch-file

netsh interface ip set address name=”Local Area Connection” static 192.168.10.10 255.255.255.0 192.168.10.1
netsh interface ip set dns name=”Local Area Connection” static 8.8.8.8

如果你想成为dhcp你应该设置

netsh interface ip set address name=”Local Area Connection” source=dhcp

注意我拼写你的名字是本地连接

在powershell V3.0和更高版本中,我们使用了

New-NetIPAddress –InterfaceAlias “Local Area Connection ” –IPv4Address “192.168.10.10” –PrefixLength 24 -DefaultGateway 192.168.10.1
Set-DnsClientServerAddress -InterfaceAlias “Local Area Connection” -ServerAddresses 8.8.8.8

并且对于启动,您可以将脚本.bat和.ps1放在启动窗口中,但在U运行任何PowerShell脚本之前应注意Set-ExecutionPolicy bypass 对于启动任何脚本,请参阅link

答案 1 :(得分:1)

我们绝对可以做到这一点。

首先,因为很多系统都有多个网络接口,所以您需要确定我们想要更改的适配器的ifIndex是什么。通过运行Get-NetIPInterface来做到这一点。你应该看到这样的结果:

enter image description here

在我的示例中,我将使用此索引,41。您应该将其更改为与您在自己的计算机上找到的内容相匹配

好的,现在要从文本文件中读取。由于您以key = value对格式(通常称为哈希表)提供数据,因此我们可以使用ConvertFrom-Stringdata轻松地从那里获取数据。这将为我们提供PowerShell哈希表,我们可以像这样拉出所需的行。

$values = get-content T:\config.properties | ConvertFrom-StringData
$values.BootProro
>statis

我们可以将此设置为动态IP模式的PC,或设置静态地址。现在,为了在您的环境中使用它,您需要找到ifIndex,如前所述。用你自己的索引替换我的索引41,然后试一试。我已经为每一行添加了-WhatIf,因此当你运行它时,你会看到会发生什么。如果您对它所做的更改感到满意,请删除-Whatif以使脚本实际更改设置。

$values = gc T:\config.properties | ConvertFrom-StringData
if ($values.BOOTPRORO -eq "dhcp"){
  Write-Output "---DHCP mode detected in 'config.properties' file"
  Write-Output "---Setting Set-NetAdapter -DHCP Enabled"
  Set-NetIPInterface –InterfaceIndex 41 –Dhcp Enabled -WhatIf
  }
else{
  Write-outPut "---static mode detected in 'config.properties' file"
  Write-Output "---Removing network configuration"
  Remove-NetIPAddress -InterfaceIndex 41 -whatif

  Write-Output "---Setting new network configuration equal to"
  $values

  New-NetIPAddress -DefaultGateway $values.GATEWAY -IPAddress $values.IPADDR -PrefixLength 24 -InterfaceIndex 41 -WhatIf
Set-DnsClientServerAddress -ServerAddresses $values.DNS -InterfaceIndex 41 -WhatIf
 }

输出如下所示:enter image description here