คำสั่งในคำตอบของ 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 เป็นเชลล์
สังเกตว่าอาจใช้งานได้กับระบบปฏิบัติการภาษาอังกฤษเท่านั้นเนื่องจากหมายถึงกลุ่ม 'ผู้ดูแลระบบ'
AvailableShells
คีย์นั้น TrustedInstaller เท่านั้นที่ทำได้ ฉันไม่สามารถเปลี่ยนการอนุญาตโดยไม่ได้รับสิทธิ์การเป็นเจ้าของคีย์ คุณคิดว่าการเป็นเจ้าของคีย์ระบบจะนำเสนอปัญหาใด ๆ หรือไม่? นี่คือ ACLs ของรีจิสทรีของฉัน: gist.github.com/vcsjones/4dca25f94bfb1cfd5857