Normal bir yükseltilmiş yöneticinin anahtara yazma erişimi olmadığı için syneticon-dj'nin yanıtındaki komut çalışmaz. Yorumlar, izinleri değiştirmeniz gerektiğini belirtir. Ancak bu regedit.exe'yi tıklatmayı içerir ve komut dosyası yüklemeleri için çalışmaz.
Aşağıdaki PowerShell betiğini kullanıyorum:
$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
önce anahtardaki izinleri değiştirir ve ardından PowerShell'i kabuk olarak ayarlar.
'Yöneticiler' grubuna atıfta bulunduğundan, bunun yalnızca İngilizce bir işletim sisteminde çalışabileceğine dikkat edin.
AvailableShells
anahtara yazma erişimi olduğu görülmüyor, yalnızca TrustedInstaller kullanıyor. Anahtarın sahipliğini almadan izinleri değiştiremiyorum. Bir sistem anahtarına sahip olmanın herhangi bir sorun yaratacağını düşünüyor musunuz? İşte kayıt defterimin