windows - hostname.exe 和 $env :ComputerName? 输出的区别

标签 windows powershell hostname

<分区>

我遇到了 $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 的来源检索值?

最佳答案

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

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

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

关于windows - hostname.exe 和 $env :ComputerName? 输出的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48053174/

相关文章:

windows - 在 Qt 中禁用进度条动画

windows - Signalr WebSockets 无法在启用了 Websocket 协议(protocol)的 Windows Server 2012 R2 + IIS 8.5 上工作,但可以在本地开发计算机上工作(Win 10)

regex - 从 PowerShell 中的正则表达式搜索获取捕获数组

ios - 在 iOS swift 5 中获取 LAN 上的设备列表及其主机名和 IP 地址

sockets - 如何在Java中使用套接字和主机名?

windows - 桥接网络在 Windows 10 下的 Virtualbox 中不起作用

windows - 在 user32.dll 中找不到 SetWindowsHookEx 程序

powershell - 选择字符串模式匹配和不匹配

powershell - 如何在文件更改时在 Powershell 中运行 MSBuild 任务

git - 更改 GitLab SSH 主机