Answers:
只需将powershell命令行作为新值添加到“ AvailableShells” regkey,即可将其作为计算机范围的设置:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells" /v "90000" /t REG_SZ /d "%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\Powershell.exe"
参考:http : //andrewmorgan.ie/2012/03/30/changing-the-default-shell-of-windows-server-8-core/
编辑:请注意,“ AvailableShells”键的默认注册表权限将不允许更改。您必须事先更改权限(例如,通过“ regedit”手动更改),以允许您的帐户(或“管理员”组)执行此更改。
reg add
示例中输入了错误的数字。
所以这是我对这个问题的解决方案。
AvailableShells
路径的权限。与在搜索中发现的许多解决方案一样,我的解决方案是将HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
值更改为Powershell。我仅在没有explorer.exe的系统上使用项目级定位来修改此值。AFAIK,这是从具有标准桌面的系统中对Server Core系统进行排序的最简单的测试之一。
我使用(powershell.exe -noexit -Command "Set-Location ${Env:USERPROFILE} ;start sconfig ; start runonce.exe /AlternativeShellStartup"
)的命令行将启动powershell,启动runone任务,设置当前目录,并在另一个Window中启动sconfig。
syneticon-dj答案中的命令不起作用,因为普通的高级管理员没有对该密钥的写权限。注释中提到您需要更改权限。但这涉及到regedit.exe的大量单击,不适用于脚本安装。
我使用以下PowerShell脚本:
$definition = @"
using System;
using System.Runtime.InteropServices;
namespace Win32Api
{
public class NtDll
{
[DllImport("ntdll.dll", EntryPoint="RtlAdjustPrivilege")]
public static extern int RtlAdjustPrivilege(ulong Privilege, bool Enable, bool CurrentThread, ref bool Enabled);
}
}
"@
Add-Type -TypeDefinition $definition -PassThru | out-null
$bEnabled = $false
# Enable SeTakeOwnershipPrivilege
$res = [Win32Api.NtDll]::RtlAdjustPrivilege(9, $true, $false, [ref]$bEnabled)
$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells", [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::takeownership)
$acl = $key.GetAccessControl()
$acl.SetOwner([System.Security.Principal.NTAccount]"Administrators")
$key.SetAccessControl($acl)
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ("BUILTIN\Administrators","FullControl","Allow")
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)
New-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells" -name 90000 -value "%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\Powershell.exe" -propertyType String
它首先更改密钥的权限,然后将PowerShell设置为外壳。
请注意,这可能仅适用于英文操作系统,因为它指的是“管理员”组。
AvailableShells
密钥的写访问权,只有TrustedInstaller才具有。没有密钥的所有权,我无法更改权限。您是否认为拥有系统密钥会带来任何问题?这是我的注册表的ACL:gist.github.com/vcsjones/4dca25f94bfb1cfd5857