17 votos

Automáticamente el Uso de PowerShell en Server Core

Cuando me localmente iniciar sesión en un Servidor De 2012 instalación del Núcleo, cada vez que tengo que teclear powershell para llegar a un comando de PowerShell línea en lugar de la llanura ol' cmd.

Suponiendo que nunca se me va a quitar la Característica de Windows PowerShell, ¿cómo puedo configurar el servidor para empezar a mí directamente en un símbolo del sistema de PowerShell en lugar de cmd?

3voto

the-wabbit Puntos 28168

Sólo tiene que añadir su comando de powershell línea como un nuevo valor a la "AvailableShells" clave para tenerlo como una configuración de todo el equipo:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells" /v "90000" /t REG_SZ /d "%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\Powershell.exe"

Referencia: http://andrewmorgan.ie/2012/03/30/changing-the-default-shell-of-windows-server-8-core/

Edit: tenga en cuenta que los permisos de registro predeterminado para el "AvailableShells" clave no permitirá el cambio. Usted tendrá que cambiar los permisos de antemano (por ejemplo, de forma manual a través de "regedit") para permitir su cuenta (o el grupo "Administradores") para llevar a cabo este cambio.

3voto

Zoredache Puntos 84524

Así que aquí está mi solución a esta pregunta.

  • Yo no quiero lío con el cambio de los permisos de la AvailableShells camino.
  • Yo quería una simple Directiva de Grupo que puede ser aplicado con seguridad a todos los sistemas en el dominio.
  • Detectar si tienen Server Core a través de WMI es diferente entre 2008R2 y 2012, por lo que no desea utilizar.
  • Quiero evitar scripts tanto como sea posible y sólo las políticas de uso y preferencias.

Mi solución, como muchos de ustedes se encuentran en una búsqueda es para cambiar el HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell valor de Powershell. He utilizado a nivel de elemento de orientación para modificar este valor sólo en los sistemas sin explorer.exe. AFAIK, este es uno de los más simples pruebas para ordenar Server Core sistemas de Sistemas con un estándar de escritorio.

La línea de comandos que uso (powershell.exe -noexit -Command "Set-Location ${Env:USERPROFILE} ;start sconfig ; start runonce.exe /AlternativeShellStartup") comenzará powershell, el fuego fuera de la runone tareas, conjuntos de mi directorio actual, y comienza sconfig en otra Ventana.

Set Default Powershell on Server Core

2voto

Todd Puntos 2342

El comando en syneticon-dj respuesta no funciona, debido a que una normal elevados de administrador no tiene acceso de escritura a la clave. Los comentarios mencione que usted necesita para cambiar los permisos. Pero esto implica un montón de clic en regedit.exe y no trabajo para instalaciones con secuencias de comandos.

Puedo usar el siguiente script de 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

primero cambia los permisos de la clave y, a continuación, establece PowerShell como la cáscara.

Aviso de que esto sólo puede trabajar en un inglés OS, en lo que se refiere a los "Administradores" del grupo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: