Server Core에서 PowerShell 자동 사용


18

Server 2012 Core 설치에 로컬로 로그인하면 일반 ol 'cmd 대신 PowerShell 명령 줄 에 입력해야 할 때마다powershell 입력합니다.

PowerShell Windows 기능을 절대 제거하지 않는다고 가정하면 cmd 대신 PowerShell 프롬프트로 바로 연결되도록 서버를 어떻게 구성 할 수 있습니까?

답변:


8

"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"를 통해 수동으로).


2
유망한 것처럼 보이지만 Administrators 그룹이 해당 AvailableShells키에 대한 쓰기 권한을 가진 것으로 보이지는 않지만 TrustedInstaller 만 해당합니다. 키를 소유하지 않으면 권한을 변경할 수 없습니다. 시스템 키를 소유하는 데 문제가 있다고 생각하십니까? 여기 내 레지스트리의 ACL은 다음과 같습니다 gist.github.com/vcsjones/4dca25f94bfb1cfd5857
vcsjones은

좋아, VM을 스냅 샷하고 어쨌든 시도하기로 결정했습니다. 작동하는 것처럼 보입니다. 유일한 것은 값이 9000이 아닌 90000이어야한다는 것입니다. 값이 너무 낮 으면 cmd가 먼저 시작됩니다.
vcsjones

@vcsjones TrustedInstaller가 키에 대해 FullControl을 유지하는 한 문제가 없어야합니다. 안전한 측면을 유지하기 위해 작업을 마친 후 소유권을 TrustedInstaller로 다시 재설정하면됩니다. 아, 그리고 숫자의 수정에 감사드립니다. 실제로 reg add예제 에서 잘못 입력했습니다 .
the-wabbit

2
또는 자동화를 강화하기 위해 그룹 정책을 통해이를 배포하고 권한을 수정해야 할 필요성을 피하십시오.)
Ashley

방금 다시 시도했지만 작동하지 않습니다. 접근 불가. -1
Peter Hahndorf

4

이 질문에 대한 해결책은 다음과 같습니다.

  • 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를 시작합니다.

Server Core에서 기본 Powershell 설정


2

일반적인 관리자는 키에 대한 쓰기 권한이 없기 때문에 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에서만 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.