Server 2012 Core 설치에 로컬로 로그인하면 일반 ol ‘cmd 대신 PowerShell 명령 줄 에 입력해야 할 때마다powershell
입력합니다.
PowerShell Windows 기능을 절대 제거하지 않는다고 가정하면 cmd 대신 PowerShell 프롬프트로 바로 연결되도록 서버를 어떻게 구성 할 수 있습니까?
답변
“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”를 통해 수동으로).
답변
이 질문에 대한 해결책은 다음과 같습니다.
AvailableShells
경로 의 권한을 변경하는 것을 망설이고 싶지 않았습니다 .- 도메인의 모든 시스템에 안전하게 적용 할 수있는 간단한 그룹 정책을 원했습니다.
- WMI를 통해 Server Core가 있는지 감지하는 것은 2008R2와 2012 사이에 다르므로 사용하고 싶지 않습니다.
- 스크립트를 최대한 피하고 정책과 환경 설정을 사용하고 싶습니다.
검색에서 찾을 수있는 많은 솔루션은 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에서만 작동합니다.