Назад | Перейти на главную страницу

Автоматически использовать PowerShell в Server Core

Когда я локально вхожу в систему установки Server 2012 Core, каждый раз Я должен напечатать powershell чтобы перейти к командной строке PowerShell, а не к обычному cmd.

Предполагая, что я никогда не удалю компонент Windows PowerShell, как я могу настроить сервер так, чтобы я сразу переходил к приглашению PowerShell вместо cmd?

Просто добавьте свою командную строку PowerShell в качестве нового значения в regkey "AvailableShells", чтобы использовать ее в качестве общесистемной настройки:

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 дорожка.
  • Мне нужна была простая групповая политика, которую можно было бы безопасно применять ко всем системам в домене.
  • Определение наличия Server Core через WMI отличается в 2008 R2 и 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 в качестве оболочки.

Обратите внимание, что это может работать только в английской ОС, так как это относится к группе «Администраторы».