Server 2012 Coreインストールにローカルでログインすると、毎回プレーンなol 'cmdの代わりにpowershell
と入力してPowerShellコマンドラインにアクセスする必要があります。
PowerShell Windows機能を削除しないと仮定すると、cmdの代わりにPowerShellプロンプトに直接入るようにサーバーを構成するにはどうすればよいですか?
"AvailableShells"レジストリキーに新しい値として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」キーのデフォルトのレジストリ権限では変更が許可されないことに注意してください。アカウント(または「Administrators」グループ)がこの変更を実行できるようにするには、事前に(たとえば、「regedit」を使用して手動で)アクセス許可を変更する必要があります。
だからここにこの質問への私の解決策があります。
AvailableShells
パスのアクセス許可の変更をいじりたくありませんでした。あなたが検索で見つける多くのような私の解決策は、HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
値をPowershellに。 Explorer.exeがインストールされていないシステムでのみ、アイテムレベルのターゲティングを使用してこの値を変更しました。私の知る限り、これは、標準のデスクトップを備えたシステムからServer Coreシステムを並べ替える最も簡単なテストの1つです。
私が使用するコマンドライン(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をシェルとして設定します。
これは「管理者」グループを参照するため、英語のOSでのみ機能することに注意してください。