![服务器 2016 核心如何知道它必须以 shell 形式启动 cmd.exe?](https://linux22.com/image/1563807/%E6%9C%8D%E5%8A%A1%E5%99%A8%202016%20%E6%A0%B8%E5%BF%83%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%AE%83%E5%BF%85%E9%A1%BB%E4%BB%A5%20shell%20%E5%BD%A2%E5%BC%8F%E5%90%AF%E5%8A%A8%20cmd.exe%EF%BC%9F.png)
有谁知道 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 上的实验,我发现在登录时运行数字最大的字符串值Name
。HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells
我没有广泛测试“最高数字”假设,但观察到存储在数据中的脚本60000
运行,而30000
没有。我还通过添加一个90000
以数据命名的新字符串值进行了测试notepad
,并且只有记事本在登录时运行,而不是60000
或30000
。
例子:
此更改是即时的,因此您只需注销并重新登录即可查看结果。
也许下次我忘记怎么做的时候我会发现这一点:)
答案2
我还看到 hklm shell= explorer.exe(默认的 Windows shell),但服务器核心需要 cmd.exe。我确实看到,每当用户连接时,runonce.exe 都会运行(从启动文件夹),并使用开关 /AlternateShellStartup
然而,它如何知道要这样做,则是另一个问题。