我想实现以下逻辑。是否可以使用批处理或电源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
我希望在启动时系统会检查该文件并相应地配置网络:
所以,我在Linus下有这样的逻辑,使用shell。该脚本在rc.d中配置并在网络服务之前执行。是否可以通过Windows实现此类功能?伙计们,请分享剧本!
答案 0 :(得分:1)
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
来做到这一点。你应该看到这样的结果:
在我的示例中,我将使用此索引,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
}
输出如下所示: