服务器 2016 核心如何知道它必须以 shell 形式启动 cmd.exe?

服务器 2016 核心如何知道它必须以 shell 形式启动 cmd.exe?

有谁知道 Server Core 如何知道它必须以 shell 形式启动 cmd.exe?

它只是 Windows 的另一个版本,您可能希望它以与 NT 以来一直采用的相同方式通过以下注册表项之一指定:

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon
  • HKCU\软件\微软\Windows NT\CurrentVersion\WinLogon
  • 值 Shell,REG_SZ = 作为 shell 启动的可执行文件(如果它不在 C:\Windows 中,则为完整路径)。

但是,我在 Server 2016 Core 中发现的并非如此。HKCU 分支中不存在 Shell 值,而在 HKLM 分支中,它被设置为“explorer.exe”,就像在完整 GUI 安装中一样。

知道在哪里可以找到它可以允许某人使用另一个 shell(例如 powershell),或者让它默认打开 sconfig 菜单,而不仅仅是一个空的 CMD 窗口(这意味着代替cmd 窗口,而不是除了就像通过运行注册表项一样)。

答案1

编辑:当然,我在发布后几分钟内就找到了另一个答案。 https://serverfault.com/questions/1098102/how-to-start-cmd-as-default-shall-for-windows-server-core-2022

当我发现这个问题时,我试图回忆过去是如何做到这一点的,以便我可以将我的 shell 更改为 pwsh 而不是 powershell。它唤醒了我的记忆,所以我想我会分享一下。

我从未找到有关此问题的官方文档,但通过在 Server Core 2016 和 Hyper-V Server 2019 上的实验,我发现在登录时运行数字最大的字符串值NameHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells我没有广泛测试“最高数字”假设,但观察到存储在数据中的脚本60000运行,而30000没有。我还通过添加一个90000以数据命名的新字符串值进行了测试notepad,并且只有记事本在登录时运行,而不是6000030000

例子: 截屏

此更改是即时的,因此您只需注销并重新登录即可查看结果。

也许下次我忘记怎么做的时候我会发现这一点:)

答案2

我还看到 hklm shell= explorer.exe(默认的 Windows shell),但服务器核心需要 cmd.exe。我确实看到,每当用户连接时,runonce.exe 都会运行(从启动文件夹),并使用开关 /AlternateShellStartup

然而,它如何知道要这样做,则是另一个问题。

相关内容