hostname.exe和$ env:ComputerName的输出之间的区别? [关闭]

问题描述 投票:1回答:2

我在脚本中遇到$env:ComputerName的值与hostname.exe命令输出之间的差异,该脚本根据预定义的集检查计算机的主机名:

if ($env:ComputerName -in $hostnames) { ... }

但是,似乎我不能依赖$env:ComputerName的值,因为它有时不同于网络上机器的主机名:

PS> hostname 
Example

PS> $env:ComputerName 
EXAMPLE

除了外壳,为什么它们会提供不同的值?在一台计算机上,两个hostname.exe输出期望名称之间的名称明显不同,而$env:ComputerName包含的名称不正确。 PowerShell是否从与hostname.exe不同的源检索值?

windows powershell hostname
2个回答
2
投票

$env命名空间在从环境变量集加载时由PowerShell.exe填充。它从启动它的进程或从注册表中提取它们。 $env:COMPUTERNAME应该与%COMPUTERNAME%环境变量匹配。值得注意的是,当环境变量的值发生更改时,它不会在所有打开的进程中更新该值。

我不是100%肯定hostname.exe从中获取了什么,但我相信它需要在系统上加载TCP / IP。它可能正在查询主机网络适配器正在侦听的网络名称,或者可能正在查询网络配置(通过注册表或某些其他方法)。

两个值不匹配的最常见实例是在重命名计算机之后但在重新启动计算机以完成名称更改之前。


2
投票

主机名 - 显示计算机的完整计算机名的主机名部分。计算机主机名通常(但不总是)与%COMPUTERNAME%变量($ env:ComputerName正在使用)相同https://technet.microsoft.com/en-us/library/bb490919.aspx

我怀疑在最底层他们都保存在注册表数据库中,只是不同的位置:HKEY_CURRENT_USER\EnvironmentHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

您可以测试此猜测,但您需要重新启动计算机。

© www.soinside.com 2019 - 2024. All rights reserved.