Powershell如何将字符串转换为System.Net.IPAddress?

4

我是一名新手,正在尝试使用PowerShell自动创建DHCP预留。

目前,我可以通过以下方式获取IP地址:

$IP = ( GEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Get-VMNetworkAdapter).IpAddresses[0]

这会返回一个类似于:

192.0.2.1

然而,Add-DhcpServer4Resrvation命令不接受一个IP地址字符串作为参数。它要求IP地址是一个'System.Net.IpAddress'。

Add-DhcpServerv4Reservation -ComputerName $DHCPServer -ScopeId $DHCPScope -IPAddress $IP -Client
Id $MacAddress -Name $HVNAME

Add-DhcpServerv4Reservation : Cannot process argument transformation on parameter 'IPAddress'. Cannot convert value "
10.254.130.104
" to type "System.Net.IPAddress". Error: "An invalid IP address was specified."
At line:1 char:86
+ ... ope -IPAddress $IP -ClientId $MacAddress -Name $HVNAME
+                    ~~~
    + CategoryInfo          : InvalidData: (:) [Add-DhcpServerv4Reservation], ParameterBindingArgumentTransformationEx
   ception
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Add-DhcpServerv4Reservation

你如何将字符串转换为 System.Net.IPAddress?
根据这个链接所说,这应该很容易。
> [ipaddress]"192.0.2.1"

然而,那不起作用。
PS C:\Windows\system32> $FOO = [IPAddress]$IP
Cannot convert value "
10.254.130.104
" to type "System.Net.IPAddress". Error: "An invalid IP address was specified."
At line:1 char:1
+ $FOO = [IPAddress]$IP
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastParseTargetInvocation
                   tworkAdapter) Format-List -Property *.254.13༁爼ሂÌGEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Get-VMNetworkAdapter) | Format-List -Property *    {༁牎ᐂÊGEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Get-VMNetworkAdapter | Format-List -Property *
ఁ牘ࠂÆ$IP = ( GEt-VM -ComputerName $HVCOMPUTERNAME -VMName $HVNAME | Gt-VMNex뿰bpte

相关问题
Powershell,获取虚拟机的IPv4地址

2个回答

11

[IPAddress]如果字符串中有空格,则无法正常工作。

使用Trim()来去除空格。

$IP = [IPAddress]$IP.Trim()

1
值得注意的是,这适用于所有空格,而不仅仅是空格。如果您的字符串中有前导或尾随制表符或空行,则使用.Trim()方法也会将它们删除,因此答案通常有效,但除了空格之外还有其他被删除的内容。 - TheMadTechnician

0
获取服务器IP地址的完全不同方法是:
通过将工作站/服务器名称作为参数传递给输入类型System.Net.DNS转换来实现
例如,如果主机的FQDN名称为ABCTest-DEV,则以下脚本将显示ABCTest-Dev的IP地址,前提是主机在域中已经有一个DNS记录可用。
$ipaddr = [System.Net.Dns]::GetHostAddresses('ABCTest-Dev')|Where AddressFamily -EQ 'InterNetwork'
Write-Host 'This IPV4 Address of the Host is: '$ipaddr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接