Usar automaticamente o PowerShell no núcleo do servidor

17

Quando faço logon localmente em uma instalação do Server 2012 Core, sempre , tenho que digitar powershell para chegar a uma linha de comando do PowerShell em vez de simples cmd.

Supondo que eu nunca removerei o Recurso do Windows do PowerShell, como posso configurar o servidor para me direcionar diretamente para um prompt do PowerShell em vez de cmd?

    
por vcsjones 23.05.2013 / 21:44

3 respostas

8

Basta adicionar sua linha de comando do powershell como um novo valor à regkey "AvailableShells" para que seja usada como configuração para toda a máquina:

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

Referência: link

Editar: observe que as permissões de registro padrão para a chave "AvailableShells" não permitirão a alteração. Você terá que alterar as permissões antecipadamente (por exemplo, manualmente por meio de "regedit") para permitir que sua conta (ou o grupo "Administradores") realize essa alteração.

    
por 23.05.2013 / 22:04
3

Então aqui está a minha solução para esta pergunta.

  • Eu não queria mexer na alteração das permissões do caminho AvailableShells .
  • Eu queria uma Política de Grupo simples que pudesse ser aplicada com segurança a todos os sistemas no domínio.
  • Detectar se você tem o Server Core via WMI é diferente entre 2008R2 e 2012, então eu não queria usar isso.
  • Eu quero evitar scripts o máximo possível e apenas usar políticas e preferências.

Minha solução como muitos que você encontrará em uma pesquisa é alterar o valor de HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell para o Powershell. Eu usei segmentação no nível do item para modificar esse valor somente em sistemas sem o explorer.exe. AFAIK, este é um dos testes mais simples para classificar sistemas Server Core de sistemas com um desktop padrão.

A linha de comando que eu uso ( powershell.exe -noexit -Command "Set-Location ${Env:USERPROFILE} ;start sconfig ; start runonce.exe /AlternativeShellStartup" ) irá iniciar o powershell, disparar as tarefas runone, definir meu diretório atual e iniciar o sconfig em outra janela.

    
por 25.11.2014 / 23:14
2

O comando na resposta do syneticon-dj não funciona, porque um administrador elevado normal não tem acesso de gravação à chave. Os comentários mencionam que você precisa alterar as permissões. Mas isso envolve muito clicar em regedit.exe e não funciona para instalações com scripts.

Eu uso o seguinte script do 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

primeiro altera as permissões na chave e, em seguida, define o PowerShell como o shell.

Observe que isso pode funcionar somente em um sistema operacional em inglês, já que se refere ao grupo "Administradores".

    
por 05.07.2013 / 22:04