最近我一直在尝试解析一系列服务器以获取 DNS 信息。我似乎无法正确地将变量传递给函数。直接调用函数并传递变量就可以了。我遗漏了什么?请帮忙。
Function Get-DnsEntry($computer)
{
If($computer -match "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
{
[System.Net.Dns]::GetHostEntry($computer).HostName
}
ElseIf( $computer -match "^.*\.\.*")
{[System.Net.Dns]::GetHostEntry($computer).AddressList[0].IPAddressToString}
ELSE { Throw "Specify either an IP V4 address or a hostname" }
}
$computer = '"abc01.somenetwork.net"'
Get-DnsEntry $computer
因此,对于上述代码,如果我仅运行 Get-DnsEntry“abc01.somenetwork.net”,它就可以正常工作。如果我尝试像上面那样将变量传递给它,它就会找不到主机。
答案1
请避免同时使用单引号和双引号,例如'“细绳”'
$computer = 'abc01.somenetwork.net'
Get-DnsEntry $computer
或者
$computer = "abc01.somenetwork.net"
Get-DnsEntry $computer
两者都应该可以正常工作。
答案2
终于让它工作了....
Function Get-DnsEntry
{[cmdletbinding()]param([string]$computer)
if($computer -match "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
{
[string]$hostname = $computer
[Net.Dns]::GetHostEntry($hostname).HostName
}
elseif( $computer -match "^.*\.\.*")
{
[string]$hostname = $computer
[Net.Dns]::resolve($hostname).AddressList[0].IPAddressToString
}
else{ Throw "Specify either an IP V4 address or a hostname" }
}
[string]$hostname = 'abc01.somenetwork.net'
Get-DnsEntry $server -Verbose