Server CoreでPowerShellを自動的に使用する


18

私はローカルでServer 2012のCoreインストールにログインすると、毎回私が持っているようにタイプするpowershell代わりに、老いたCMD無地のPowerShellコマンドラインを取得します。

PowerShell Windows機能を削除しないと仮定した場合、cmdではなくPowerShellプロンプトに直接進むようにサーバーを構成するにはどうすればよいですか?

回答:


8

powershellコマンドラインを新しい値として「AvailableShells」regkeyに追加するだけで、マシン全体の設定として使用できます。

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」などを使用して手動で)アクセス許可を変更する必要があります。


2
これは有望に見えますが、AdministratorsグループがそのAvailableShellsキーへの書き込みアクセス権を持っているようには見えず、TrustedInstallerだけが持っています。キーの所有権を取得せずにアクセス許可を変更することはできません。システムキーの所有権を取得すると問題が発生すると思いますか?レジストリのACLは次のとおり
vcsjones

OK、VMのスナップショットを作成して、とにかく試してみることにしました。他の唯一のものは、値が9000ではなく90000であることです。値が低すぎる場合、cmdが最初に起動します。
vcsjones

@vcsjonesでは、TrustedInstallerにキーに対するFullControlを保持させる限り、問題は発生しません。安全のために、完了後に所有権をTrustedInstallerにリセットするだけで済みます。ああ、数字の修正に感謝します-実際、私のreg add例では間違って入力しました。
the-wabbit

2
または、自動化を追加するためにグループポリシーを介してこれを展開し、アクセス許可を変更する必要を回避します;)
アシュリー

もう一度試してみましたが、うまくいきません。アクセスが拒否されました。-1
ピーターハーンドルフ2013年

4

そこで、この質問に対する私の解決策を紹介します。

  • AvailableShellsパスのアクセス許可を変更することをいじりたくありませんでした。
  • ドメイン上のすべてのシステムに安全に適用できる単純なグループポリシーが必要でした。
  • WMIを介してServer Coreがあるかどうかを検出するのは2008R2と2012で異なるため、使用したくありませんでした。
  • スクリプトを可能な限り避け、ポリシーと設定を使用するだけです。

多くの人が検索で見つける私の解決策は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を起動します。

Server CoreでデフォルトのPowershellを設定する


2

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でのみ機能することに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.