当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 PowerShell 中获取完全合格的域名 [7 种方法]

作者:精品下载站 日期:2024-12-14 05:31:38 浏览:13 分类:玩电脑

在 PowerShell 中获取完全合格的域名 [7 种方法]


[玩转系统] 在 PowerShell 中获取完全合格的域名 [7 种方法]

使用环境变量

使用环境变量获取完全限定的域名。

使用环境变量:

$computer_name = $env:COMPUTERNAME
$fqdn = $env:USERDNSDOMAIN
Write-Output "Fully Qualified Domain Name: $computer_name.$fqdn"

输出 :

Fully Qualified Domain Name: MAS-DC-01.MASLAB.COM

首先,我们将环境变量 ($evn:COMPUTERNAME) 的值分配给 $computer_name 变量。环境变量COMPUTERNAME存储了当前计算机的名称,或者你可以说出当前主机的名称;两者意思相同。

然后,我们将 $env:USERDNSDOMAIN 环境变量的值分配给 $fqdn 变量。此处,USERDNSDOMAIN 存储与当前用户关联的 DNS 域名。这意味着它指示用户帐户注册的域名。

最后,我们通过用点分隔来连接 $computer_name$fqdn 的值。我们使用 Write-Output cmdlet 将其显示在 PowerShell 控制台上。

使用 System.Net.Dns 类

使用System.Net.Dns类获取完全限定的域名。

使用 System.Net.Dns 类:

$host_name = [System.Net.Dns]::GetHostName()
$ip_addresses = [System.Net.Dns]::GetHostAddresses($host_name)
foreach ($current_ip in $ip_addresses) {
    if ($current_ip.AddressFamily -eq 'InterNetwork') {
        $fqdn = [System.Net.Dns]::GetHostEntry($current_ip).HostName
        break
    }
}
Write-Output "Fully Qualified Domain Name: $fqdn"

输出 :

Fully Qualified Domain Name: MAS-DC-01.maslab.com

使用 Dns 类调用 GetHostName() 方法。我们用它来检索本地计算机名称,该名称进一步分配给 $host_name 变量。

我们使用了另一个名为 GetHostAddresses() 的方法,向其提供 $host_name 作为参数,以获取与 $host_name 关联的所有 IP 地址的数组代码>.我们将此数组存储在 $ip_addresses 变量中。

然后,我们使用 foreach 循环来循环 $ip_addresses 数组。在每次迭代中,我们使用 if 语句和 -eq(等于)运算符来确定某个地址族 (AddressFamily) 是否为当前 IP 地址 ($current_ip) 等于 InterNetwork,类似于 IPv4 地址。

如果满足要求,则使用 GetHostEntry() 方法,该方法需要 $current_ip 参数来创建 System.Net.IPHostEntry 对象。我们使用 System.Net.IPHostEntry 对象的 HostName 属性来获取 FQDN,该 FQDN 存储在 $fqdn 变量中。接下来,我们使用 break 语句退出循环。

为什么我们退出 for 循环?因为我们只想使用第一个 IPv4 地址来获取 FQDN。最后,我们使用 Write-Output cmdlet 在控制台上打印 $fqdn

以下是单行解决方案:

使用 System.Net.Dns 类:

[System.Net.Dns]::GetHostEntry($env:COMPUTERNAME).HostName
#OR
[System.Net.Dns]::GetHostEntry([string]"localhost").HostName

输出 :

MAS-DC-01.maslab.com
MAS-DC-01.maslab.com

根据文档,GetHostByName()Resolve() 方法已被弃用。

使用 ping 命令

使用ping命令获取完全限定的域名。

使用 ping 命令:

$fqdn= $(ping localhost -n 1)[1].split(" ")[1]
Write-Output "Fully Qualified Domain Name: $fqdn"

输出 :

Fully Qualified Domain Name: MAS-DC-01.maslab.com

我们使用了 ping 命令,这是一个 PowerShell 命令,通过 ping 主机名并解析结果来获取本地计算机的 FQDN。在上面的示例中,ping 是如何工作的? ping localhost -n 1 用于 ping 本地计算机一次以检索主机名和 IP 地址。

然后,我们使用命令替换 ($ (...)) 来捕获 ping localhost -n 1 命令的输出;但是,[1] 获取了捕获的输出的第二行,其中包含主机名。此外,我们链接了 split(" ") 方法,使用空格作为分隔符将第二行拆分为单词数组,并通过访问 1 检索第二个单词(主机名) 索引为[1]

我们将最终输出存储在 $fqdn 变量中,该变量进一步与 Write-Output cmdlet 一起使用,以在 PowerShell 控制台上打印其值。

如果您不访问索引 1 两次,如上例所示,您将获得更详细的输出,包括有关数据包的信息(发送、接收、丢失)、往返时间(最小、最大、平均值)等

使用 Get-WmiObject Cmdlet

使用 Get-WmiObject cmdlet 获取完全限定的域名。

使用 Get-WmiObject Cmdlet:

$computer_name = $env:COMPUTERNAME
$wmi_obj = Get-WmiObject -Class Win32_ComputerSystem -Namespace 'root\CIMv2'
$domain_name = $wmi_obj.Domain
Write-Output "Fully Qualified Domain Name: $computer_name.$domain_name"

输出 :

Fully Qualified Domain Name: MAS-DC-01.maslab.com

我们首先使用 $env:COMPUTERNAME 环境变量来获取本地计算机的计算机名称,并将其保存在 $computer_name 变量中。请记住,$env:COMPUTERNAME 包含当前计算机的名称。

然后,我们使用 Get-WmiObject cmdlet 查询 Windows Management Instrumentation 以获取有关计算机系统的详细信息;特别是,我们针对 root\CIMv2 命名空间的 Win32_ComputerSystem 类,其中包含有关计算机操作系统和硬件的不同属性。我们将详细信息存储在 $wmi_obj 变量中。这里,$wmi_obj 表示 WMI 对象。

我们分别使用 -Class-NameSpace 参数指定了 Win32_ComputerName 类和 'root\CIMv2' 命名空间。

此外,我们使用此变量来访问其 Domain 属性的值,该属性表示计算机加入的 Active Directory 域的名称。结果值存储在 $domain_name 变量中。最后,我们使用 Write-Output cmdlet 在 PowerShell 控制台上打印完全限定的域名。

或者,我们可以使用 Get-WmiObject cmdlet 的别名,如下所示:

使用 Get-WmiObject Cmdlet:

(gwmi -Class Win32_ComputerSystem).DNSHostName+"."+(gwmi -Class Win32_ComputerSystem).Domain

输出 :

MAS-DC-01.maslab.com

在这里,我们使用 .DNSHostName.Domain 属性来获取本地计算机的计算机名称和本地计算机加入的域。我们使用连接运算符 (+) 将两者连接起来,并用点 (.) 分隔它们。

使用 Get-CimInstance Cmdlet

使用Get-CimInstance cmdlet 获取完全限定的域名。如果您使用的是 PowerShell 3.0+,请继续执行以下解决方案。为什么?从 PowerShell 3.0 开始,Get-WmiObject 已被 Get-CimInstance 取代。请记住,您只能在 Windows 平台上使用 Get-CimInstance

使用 Get-CimInstance Cmdlet:

(Get-CimInstance -Class Win32_ComputerSystem).Name+"."+(Get-CimInstance -ClassWin32_ComputerSystem).Domain

输出 :

MAS-DC-01.maslab.com

此代码段类似于上一节中学到的最后一个示例,但我们使用 GetCimInstance cmdlet 来检索有关 Win32_ComputerSystem 类的信息。我们使用 .Name.Domain 属性来获取本地计算机的名称以及该计算机加入的域。

使用 Get-ADComputer Cmdlet

使用Get-ADComputer cmdlet 获取完全限定的域名。您必须在计算机上安装 Active Directory 才能使用此 cmdlet。

使用 Get-ADComputer Cmdlet:

$fqdn = (Get-ADComputer $(hostname)).DNSHostName
Write-Output "Fully Qualified Domain Name: $fqdn"

输出 :

Fully Qualified Domain Name: MAS-DC-01.maslab.com

上述命令使用 Active Directory 模块检索本地计算机的 DNS 主机名。效果如何?我们使用 hostname 命令作为 $ (hostname) 来获取本地计算机的主机名,该主机名被指定为 Get-ADComputer cmdlet 的参数。

然后,Get-ADComputer cmdlet 访问有关 Active Directory 中计算机对象的信息。最后,我们使用 DNSHostName 属性来获取计算机对象的 DNS 主机名。我们将结果值分配给 $fqdn 变量,以便使用 Write-Output cmdlet 将其进一步显示在控制台上。

使用注册表

使用注册表获取完全限定的域名。如果您的计算机上安装了 Active Directory,则可以使用此解决方案。

使用注册表:

$domain_name = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters').Domain
$computer_name = $env:COMPUTERNAME
$fqdn = "$computer_name.$domain_name"
Write-Output "Fully Qualified Domain Name: $fqdn"

输出 :

Fully Qualified Domain Name: MAS-DC-01.maslab.com

我们使用 Get-ItemProperty cmdlet 访问‘HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters’ 注册表项来检索其属性。我们用于此代码的注册表项包含与网络相关的配置设置。

我们使用 .Domain 属性来检索计算机的域名。当计算机连接到 Active Directory 域时,通常会在注册表中设置此域名。我们将 .Domain 属性的值存储在 $domain_name 变量中。

之后,我们使用 $env:COMPUTERNAME 获取本地计算机的名称并将其存储在 $computer_name 变量中。接下来,我们使用点 (.) 分隔 $computer_name$domain_name,并将连接后的值分配给 >$fqdn 变量,进一步与 Write-Output 一起使用以将其显示在 PowerShell 控制台上。

这就是如何在 PowerShell 中获取完全限定域名的全部内容。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯