繁体   English   中英

如何使用 PowerShell 在 Windows 10 中为我的自动化操作系统构建过程永久设置静态 IP 地址?

[英]How do I permanently set a static IP Address in Windows 10 using PowerShell for my automated OS build process?

当我开始通过观看视频学习如何执行此操作时,我了解了 IP 地址 InterfaceIndexes。 我了解到,如果不知道 IP 地址的 InterfaceIndex,我就无法设置 IP 地址。 这似乎在我看过的每台计算机上都不一样,而且似乎是随机的。 然后,我了解到您可以使用 IP 地址别名。 在全新的 Windows 安装中,IP 地址别名 Ethernet0 似乎将成为我可以依赖的常量。 因此,凭借我原始的 PowerShell 技能,我认为我可以伸出手并获取 PC 的 IP 地址并检查它是否与预期相符。 如果不是,则清除 Ethernet0 的所有内容,并创建别名为 Ethernet0 的新 IP 地址。 当然,我第一次这样做时效果很好,我继续前进。 我有一个名为 Ethernet0 的静态 IP 地址,具有指定的 IP 地址。 我刚进去看了看,我有 2 个可用的 NIC。 一个叫做“Ethernet”,另一个是“Ethernet2”。 它们都没有静态 IP 地址。 我假设 PC 想要在重新启动时设置随机别名? 我对发生的事情有点困惑。 当然,当我再次运行我的方法时,我收到一条错误消息“没有 InterfaceAlias 等于 ethernet0”,所以我的代码不起作用。 我显然离我应该如何处理这个问题还差得很远。 我想进行全新安装并运行配置脚本来设置所有内容,而无需任何 GUI 交互。 我不在企业域类型的环境中工作,必须创建自己的流程。 请帮助进一步提高我的 PowerShell 智慧,因为我只是一个 Padawan。

function SetIp {

    $ipv4 = (Test-Connection -ComputerName $env:COMPUTERNAME -Count 1) .IPV4Address.IpAddressToString

    if($ipv4 -eq "my.ip.add.res") {
        Write-Host "Do Nothing as the IP has already been set"
    }
    else {
        Remove-NetIPAddress -InterfaceAlias ethernet0
        New-NetIPAddress -IPAddress my.ip.add.res -InterfaceAlias ethernet0 -PrefixLength 16
        Write-Host "IP Address has been set"
    }
}

您可以使用Get-NetIPInterface | Select * -First 1查看有关NetIPInterface对象的所有可用信息。 Get-NetIPInterface | Select * -First 1 一些有用的属性是ConnectionStateAddressFamilyDhcp 例如,尝试这样的事情来找到有效的:

Get-NetIPInterface | Where { 
  $_.ConnectionState -eq 'Connected' -and
  $_.AddressFamily -eq 'IPV4' -and
  $_.InterfaceAlias -like 'Eth*' -and
  # check if in your local subnet
  ($_.DHCP -eq 'Enabled' -or ($_|Get-NetIPAddress).IPv4Address -like '1.2.3.*')
}

不过,您可能会遇到各种各样的事情,所以这取决于您的环境的控制程度:

  • Wifi 和/或以太网已连接
  • 第二个以太网或笔记本电脑扩展坞创建新的网络接口
  • VPN 软件创建了一个新的“以太网”接口

如果您需要询问用户输入,您可以使用 gridview 来完成:

$Selected = Get-NetIPInterface | 
  ? {$_.AddressFamily -eq 'IPV4' -and $_.InterfaceAlias -notlike 'Loopback*'} | 
  Select IFIndex,InterfaceAlias,ConnectionState | 
  # Ask the user to select the interface
  Out-GridView -Title 'Please select the correct interface' -OutputMode Single

Set-NetIPInterface -InterfaceIndex $Selected.ifIndex -AddressFamily IPv4  ## etc...

也就是说,仅设置 DHCP 来处理此问题几乎总是更容易。 DHCP 预留通常与用户机器的静态 IP 一样好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM