此机器的FQDN
:
thufir@dur:~$
thufir@dur:~$ hostname --fqdn
dur.bounceme.net
thufir@dur:~$
是的......与powershell
一起工作directly可以FQDN
dur.bounceme.net
好了:
thufir@dur:~/powershell$
thufir@dur:~/powershell$ pwsh
PowerShell v6.0.1
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/pscore6-docs
Type 'help' to get help.
PS /home/thufir/powershell>
PS /home/thufir/powershell> [System.Net.Dns]::GetHostByName((hostname)).HostName
dur.bounceme.net
PS /home/thufir/powershell>
但如果我想迭代一个数组怎么办?如何让FQDN
显示为dur.bounceme.net
?
thufir@dur:~/powershell$
thufir@dur:~/powershell$ ./hostname.ps1
dur.bounceme.net
beginning loop
google.com
Exception calling "GetHostEntry" with "1" argument(s): "No such device or address"
At /home/thufir/powershell/hostname.ps1:14 char:3
+ $fqdn = [System.Net.Dns]::GetHostEntry($i).HostName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ExtendedSocketException
google.com
localhost
end
thufir@dur:~/powershell$
脚本:
#!/usr/bin/pwsh -Command
#hostname is a reserved variable name?
[System.Net.Dns]::GetHostByName((hostname)).HostName
"beginning loop"
$hosts = ("google.com", "hostname", "localhost")
foreach($i in $hosts) {
$fqdn = [System.Net.Dns]::GetHostEntry($i).HostName
write-host $fqdn
}
"end"
我尝试从hostname
左右删除引号,并在美元符号$
前加上。这是一个保留字?
用于解释所涉及术语的奖励点。
答案 0 :(得分:1)
您正在使用主机名作为字符串,并且该字符串不在您的hosts文件中,就像localhost一样,它将失败。
如果您使用的是默认的本地主机名,则它们是:
'127.0.0.1'
$env:COMPUTERNAME
'localhost'
所以,你应该这样做
$TargetHosts = ('stackoverflow.com','google.com', $env:COMPUTERNAME,'localhost','127.0.0.1')
foreach($TargetHost in $TargetHosts)
{ ( $fqdn = [Net.Dns]::GetHostEntry($TargetHost).Hostname ) }
stackoverflow.com
google.com
WS01
WS01
WS01
另请参阅此文章,了解如何使用本机Resolve-DnsName cmdlet与.NET库。
为什么不使用内置的DNS cmdlet?还是有一个特别的 你是否正沿着原始的.Net路径旅行?代码项目, 家庭作业,好奇心?
答案 1 :(得分:1)
似乎存在关于 hostname 的作用以及命令和字符串之间的区别的混淆。让我们看看第一部分是否有效:
[System.Net.Dns]::GetHostByName((hostname)).HostName
Powershell将其解析为
Run command hostname,
Call GetHostByName(), pass hostname's output as a parameter to the call
from that result, show the HostName attribute
在foreach循环中,参数作为字符串传递。因此,在主机名案例中:
$i <-- hostname
[System.Net.Dns]::GetHostEntry($i).HostName
正在被解析为
Call GetHostEntry("hostname")
from that result, show the HostName attribute