当我在本地login到Server 2012 Core安装时, 每次必须键入powershell才能到达PowerShell命令行而不是普通的ol cmd。
假设我将永远不会删除PowerShell Windowsfunction,那么如何才能将服务器configuration为直接进入PowerShell提示符而不是cmd?
只需将您的PowerShell命令行作为一个新的值添加到“AvailableShells”registry中,将其作为一个机器范围的设置:
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”键的默认registry权限不允许更改。 您必须事先更改权限(例如手动通过“regedit”)以允许您的帐户(或“pipe理员”组)执行此更改。
所以这是我对这个问题的解决scheme。
AvailableShellspath的权限。 我在许多search中find的解决scheme是将HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell值更改为Powershell。 我已经使用项目级目标,只在没有explorer.exe的系统上修改这个值。 AFAIK,这是使用标准桌面对系统中的服务器核心系统进行sorting的最简单的testing之一。
我使用的命令行( powershell.exe -noexit -Command "Set-Location ${Env:USERPROFILE} ;start sconfig ; start runonce.exe /AlternativeShellStartup" )将启动powershell,启动runone任务,设置我的当前目录,并在另一个窗口中启动sconfig。

syneticon-dj的答案中的命令不起作用,因为正常的提升的pipe理员没有对密钥的写访问权限。 评论提到您需要更改权限。 但是这涉及到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设置为shell。
请注意,这可能只适用于英文操作系统,因为它指的是“pipe理员”组。