태그 보관물: windows-server-2012

windows-server-2012

Server Core에서 PowerShell 자동 사용 PowerShell 명령 줄 에 입력해야

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

Server Core에서 기본 Powershell 설정


답변

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


답변