Powershell 为 System.Net.DNS 传递函数变量

Powershell 为 System.Net.DNS 传递函数变量

最近我一直在尝试解析一系列服务器以获取 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

相关内容