답변:
"AvailableShells"regkey에 powershell 명령 행을 새 값으로 추가하면 시스템 전체 설정으로 사용할 수 있습니다.
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 작업을 시작하고 현재 디렉토리를 설정하고 다른 창에서 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을 셸로 설정합니다.
'관리자'그룹을 참조하므로 영어 OS에서만 작동합니다.
AvailableShells
키에 대한 쓰기 권한을 가진 것으로 보이지는 않지만 TrustedInstaller 만 해당합니다. 키를 소유하지 않으면 권한을 변경할 수 없습니다. 시스템 키를 소유하는 데 문제가 있다고 생각하십니까? 여기 내 레지스트리의 ACL은 다음과 같습니다 gist.github.com/vcsjones/4dca25f94bfb1cfd5857