PowerShell: Kayıt Defteri Anahtarlarını veya Parametrelerini Alın, Değiştirin, Oluşturun ve Kaldırın
Kayıt Defteri Düzenleyicisi (
regedit.exe) ve
reg.exekomut satırı yardımcı programı, Windows'ta kayıt defterine erişmek ve kayıt defterini yönetmek için tek araç değildir. PowerShell, yöneticinin kayıt defteriyle etkileşime girmesi için çok sayıda araç sağlar. PowerShell'i kullanarak bir kayıt defteri anahtarı/parametreleri oluşturabilir, değiştirebilir veya silebilir, değeri arayabilir ve uzak bir bilgisayarda kayıt defterine bağlanabilirsiniz.
PowerShell ile Windows Kayıt Defterinde Bir Dosya Sistemi Gibi Gezinme
PowerShell'de kayıt defteriyle çalışmak, yerel diskteki ortak dosyalarla çalışmaya benzer. Temel fark, bu kavramda kayıt defteri anahtarlarının dosyalara benzer olması ve kayıt defteri parametrelerinin bu dosyaların özellikleri olmasıdır.
Bilgisayarınızdaki kullanılabilir sürücülerin listesini görüntüleyin:
get-psdrive
Sürücüler arasında (sürücü harfleri atanmış olarak), Kayıt defteri sağlayıcısı aracılığıyla kullanılabilen özel aygıtlar olduğunu unutmayın - HKCU (HKEY_CURRENT_USER) ve HKLM (HKEY_LOCAL_MACHINE). Kayıt ağacına, sürücülerinizde gezindiğiniz gibi göz atabilirsiniz. HKLM:\ ve HKCU:\ belirli bir kayıt defteri kovanına erişmek için kullanılır.
cd HKLM:\
Dir -ErrorAction SilentlyContinue
Bunlar, dosya ve klasörleri yönetmek için kullandığınız aynı PowerShell cmdlet'lerini kullanarak kayıt defteri anahtarına ve bunların parametrelerine erişebilirsiniz.
Kayıt defteri anahtarlarına başvurmak için cmdlet'leri xxx-Item ile kullanın:
Get-Item- bir kayıt defteri anahtarı alın
New-Item— yeni bir kayıt defteri anahtarı oluşturun
Remove-Item- bir kayıt defteri anahtarını silin
Kayıt defteri parametreleri, kayıt defteri anahtarının özellikleri olarak düşünülmelidir (dosya/klasör özelliklerine benzer). xxx-ItemProperty cmdlet'leri, kayıt defteri parametrelerini yönetmek için kullanılır:
Get-ItemProperty- bir kayıt parametresinin değerini al
Set-ItemProperty- bir kayıt defteri parametresinin değerini değiştirin
New-ItemProperty- kayıt defteri parametresi oluştur
Rename-ItemProperty- parametreyi yeniden adlandır
Remove-ItemProperty- kayıt defteri parametresini kaldır
İki komuttan birini kullanarak belirli kayıt defteri anahtarına (örneğin, otomatik sürücü güncellemelerinin ayarlarından sorumlu anahtara) gidebilirsiniz:
cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearchingveya
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearchingPowerShell aracılığıyla Kayıt Defteri Parametre Değeri Alın
Lütfen kayıt defteri anahtarında depolanan parametrelerin iç içe geçmiş nesneler değil, belirli bir kayıt defteri anahtarının özelliği olduğunu unutmayın. Herhangi bir kayıt defteri anahtarının herhangi bir sayıda parametresi olabilir.
Şu komutu kullanarak geçerli kayıt defteri anahtarının içeriğini listeleyin:
dirVeya
Get-ChildItemKomut, iç içe geçmiş kayıt defteri anahtarları ve bunların özellikleri hakkında bilgi görüntüledi. Ancak geçerli anahtarın bir özelliği olan SearchOrderConfig parametresi hakkında bilgi göstermedi.
Kayıt defteri anahtarının parametrelerini almak için Get-Item cmdlet'ini kullanın:
Get-Item .Veya
Get-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearchingGördüğünüz gibi, DriverSearching anahtarının yalnızca bir parametresi vardır - 1 değerine sahip SearchOrderConfig.
Bir kayıt defteri anahtarı parametresinin değerini almak için Get-ItemProperty cmdlet'ini kullanın.
$DriverUpdate = Get-ItemProperty -Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching’
$DriverUpdate.SearchOrderConfigSearchOrderConfig parametresinin değerinin 1 olduğunu anladık.
PowerShell ile Kayıt Defteri Değerini Değiştirme
SearchOrderConfig reg parametresinin değerini değiştirmek için Set-ItemProperty cmdlet'ini kullanın:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0Parametre değerinin değiştiğinden emin olun:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfigPowerShell ile Yeni Kayıt Anahtarı veya Parametresi Nasıl Oluşturulur?
Yeni bir kayıt defteri anahtarı oluşturmak için Yeni Öğe komutunu kullanın. NewKey adıyla yeni bir anahtar oluşturalım:
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
New-Item -Path $HKCU_Desktop -Name NewKeyŞimdi yeni bir kayıt defteri anahtarında yeni bir parametre oluşturalım. REG_SZ türünde SuperParamString adlı ve filetmp1.txt değerinde yeni bir dize parametresi oluşturmamız gerektiğini varsayalım:
New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value ”filetmp1.txt” -PropertyType "String"Kayıt defteri parametreleri için aşağıdaki veri türlerini kullanabilirsiniz:
- String (REG_SZ)
- ExpandString (REG_EXPAND_SZ)
- MultiString (REG_MULTI_SZ)
- Binary (REG_BINARY)
- DWord (REG_DWORD)
- Qword (REG_QWORD)
- Unknown (unsupported registry data type)
Yeni anahtarın ve parametrenin kayıt defterinde göründüğünden emin olun.
Bir kayıt defteri anahtarının var olup olmadığı nasıl kontrol edilir?
Belirli bir kayıt defteri anahtarı olup olmadığını kontrol etmeniz gerekiyorsa Test-Path cmdlet'ini kullanın:
Test-Path 'HKCU:\Control Panel\Desktop\NewKey'Aşağıdaki PowerShell betiği, belirli bir kayıt defteri değerinin olup olmadığını kontrol edecek ve yoksa oluşturacaktır.
regkey='HKCU:\Control Panel\Desktop\NewKey'
$regparam='testparameter'
if (Get-ItemProperty -Path $regkey -Name $regparam -ErrorAction Ignore)
{ write-host 'The registry entry already exist' }
else
{ New-ItemProperty -Path $regkey -Name $regparam -Value ”a-d_test” -PropertyType "String" }Öğeyi Kopyala cmdlet'ini kullanarak girişleri bir kayıt defteri anahtarından diğerine kopyalayabilirsiniz:
$source='HKLM:\SOFTWARE\7-zip\'
$dest = 'HKLM:\SOFTWARE\backup'
Copy-Item -Path $source -Destination $dest -RecurseAlt anahtarlar dahil her şeyi kopyalamak istiyorsanız -Recurse anahtarını ekleyin.
Bir Kayıt Anahtarını veya Parametreyi Silme
Remove-ItemProperty komutu, kayıt defteri anahtarındaki bir parametreyi kaldırmak için kullanılır. Daha önce oluşturulan SuperParamString parametresini kaldıralım:
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
Remove-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString"Kayıt defteri anahtarının tamamını tüm içeriğiyle birlikte silebilirsiniz:
Remove-Item -Path $HKCU_Desktop\NewKey -RecurseNot. -Tekrarlama anahtarı, tüm alt anahtarların yinelemeli olarak kaldırılması gerektiğini belirtir.
Reg anahtarındaki tüm öğeleri kaldırmak için (anahtarın kendisini değil):
Remove-Item -Path $HKCU_Desktop\NewKey\* -RecurseBir Kayıt Defteri Anahtarını veya Parametreyi Nasıl Yeniden Adlandırırım?
Kayıt defteri parametresini şu komutla yeniden adlandırabilirsiniz:
Rename-ItemProperty -path ‘HKCU:\Control Panel\Desktop\NewKey’ -name "SuperParamString" -newname “OldParamString”Aynı şekilde, kayıt defteri anahtarını yeniden adlandırabilirsiniz:
Rename-Item -path 'HKCU:\Control Panel\Desktop\NewKey' OldKeyPowerShell Kullanarak Anahtar Sözcük İçin Kayıt Defterinde Arama Yapın
PowerShell, kayıt defterinde arama yapmanızı sağlar. Sonraki adım, adları *dpi* anahtarını içeren parametreleri HKCU:\Control Panel\Desktop'ta arar.
$Path = (Get-ItemProperty ‘HKCU:\Control Panel\Desktop’)
$Path.PSObject.Properties | ForEach-Object {
If($_.Name -like '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}Belirli bir ada sahip bir kayıt defteri anahtarı bulmak için:
Get-ChildItem -path HKLM:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*a-d*"}PowerShell ile Kayıt Defteri Anahtarı İzinlerini Ayarlama
Get-ACL cmdlet'ini kullanarak geçerli kayıt defteri anahtarı izinlerini alabilirsiniz (Get-ACL cmdlet, dosya ve klasörler üzerindeki NTFS izinlerini yönetmenize de olanak tanır).
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
$rights.Access.IdentityReferenceAşağıdaki örnekte, yerleşik Users grubuna yazma erişimi vermek için bu kayıt defteri anahtarındaki ACL'yi değiştireceğiz.
Geçerli izinleri alın:
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'Erişim vermek istediğiniz kullanıcıyı veya grubu belirtin:
$idRef = [System.Security.Principal.NTAccount]"BuiltIn\Users"Erişim düzeyini seçin:
$regRights = [System.Security.AccessControl.RegistryRights]::WriteKeyİzin devralma ayarlarını ayarla :
$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::NoneErişim türü (İzin Ver/Reddet):
$acType = [System.Security.AccessControl.AccessControlType]::AllowBir erişim kuralı oluşturun:
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)Mevcut ACL'ye yeni bir kural ekleyin:
$rights.AddAccessRule($rule)Kayıt defteri anahtarına yeni izinler uygulayın:
$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'Yeni grubun kayıt defteri anahtarının ACL'sinde göründüğünden emin olun.
Uzak Bilgisayardan PowerShell Aracılığıyla Kayıt Defteri Değeri Alma
PowerShell, uzak bir bilgisayarın kayıt defterine erişmenizi sağlar. WinRM (Invoke-Command veya Enter-PSSession) kullanarak uzak bir bilgisayara bağlanabilirsiniz. Uzak bir bilgisayardan bir kayıt defteri parametresinin değerini almak için:
Invoke-Command -ComputerName srv-fs1 -ScriptBlock {Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}Veya uzak bir kayıt defteri bağlantısı kullanarak (RemoteRegistry hizmeti etkinleştirilmelidir)
$Server = "lon-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")İpucu. Bir dizi etki alanı bilgisayarında belirli bir kayıt defteri parametresini oluşturmanız/değiştirmeniz gerekiyorsa, GPO özelliklerini kullanmak daha kolaydır.
Bu nedenle, Windows kayıt defteri girişlerine erişmek ve bunları yönetmek için PowerShell kullanımına ilişkin tipik örnekleri ele aldık. Bunları otomasyon betiklerinizde kullanabilirsiniz.







