ตัวแก้ไขรีจิสทรี (regedit.exe
) และ reg.exe
ยูทิลิตีบรรทัดคำสั่งไม่ได้เป็นเพียงเครื่องมือเดียวในการเข้าถึงและจัดการรีจิสทรีใน Windows PowerShell มีเครื่องมือจำนวนมากสำหรับผู้ดูแลระบบในการโต้ตอบกับรีจิสทรี เมื่อใช้ PowerShell คุณสามารถสร้าง แก้ไข หรือลบรีจิสตรีคีย์/พารามิเตอร์ ค้นหาค่า และเชื่อมต่อกับรีจิสตรีบนคอมพิวเตอร์ระยะไกล
ไปที่ Windows Registry เหมือนกับระบบไฟล์ที่มี PowerShell
การทำงานกับรีจิสทรีใน PowerShell นั้นคล้ายคลึงกับการทำงานกับไฟล์ทั่วไปบนดิสก์ในเครื่อง ข้อแตกต่างที่สำคัญคือในแนวคิดนี้ รีจิสตรีคีย์จะคล้ายคลึงกับไฟล์ และพารามิเตอร์รีจิสตรี้คือคุณสมบัติของไฟล์เหล่านี้
แสดงรายการไดรฟ์ที่มีในคอมพิวเตอร์ของคุณ:
get-psdrive
โปรดทราบว่าในไดรฟ์ (โดยกำหนดอักษรระบุไดรฟ์) มีอุปกรณ์พิเศษที่พร้อมใช้งานผ่านผู้ให้บริการรีจิสทรี – HKCU (HKEY_CURRENT_USER) และ HKLM (HKEY_LOCAL_MACHINE) คุณสามารถเรียกดูแผนผังรีจิสตรีได้ในลักษณะเดียวกับการไปยังส่วนต่างๆ ของไดรฟ์ HKLM:\ และ HKCU:\ ใช้เพื่อเข้าถึงกลุ่มรีจิสทรีเฉพาะ
cd HKLM:\
Dir -ErrorAction SilentlyContinue
คุณสามารถเข้าถึงรีจิสตรีคีย์และพารามิเตอร์โดยใช้ PowerShell cmdlet เดียวกันกับที่คุณใช้จัดการไฟล์และโฟลเดอร์
หากต้องการอ้างถึงรีจิสตรีคีย์ ให้ใช้ cmdlet กับ xxx-Item :
Get-Item
– รับรีจิสตรีคีย์New-Item
— สร้างรีจิสตรีคีย์ใหม่Remove-Item
– ลบรีจิสตรีคีย์
พารามิเตอร์รีจิสทรีควรถือเป็นคุณสมบัติของคีย์รีจิสทรี (คล้ายกับคุณสมบัติของไฟล์/โฟลเดอร์) xxx -ItemProperty cmdlets ใช้เพื่อจัดการพารามิเตอร์รีจิสตรี:
Get-ItemProperty
– รับค่าพารามิเตอร์รีจิสตรีSet-ItemProperty
– เปลี่ยนค่าของพารามิเตอร์รีจิสตรีNew-ItemProperty
– สร้างพารามิเตอร์รีจิสตรีRename-ItemProperty
– เปลี่ยนชื่อพารามิเตอร์Remove-ItemProperty
— ลบพารามิเตอร์รีจิสตรี
คุณสามารถนำทางไปยังรีจิสตรีคีย์เฉพาะ (เช่น ไปยังคีย์ที่รับผิดชอบการตั้งค่าการอัปเดตไดรเวอร์อัตโนมัติ) โดยใช้คำสั่งใดคำสั่งหนึ่งจากสองคำสั่ง:
cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
หรือSet-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
รับค่าพารามิเตอร์รีจิสทรีผ่าน PowerShell
โปรดทราบว่าพารามิเตอร์ที่จัดเก็บไว้ในรีจิสตรีคีย์ไม่ใช่อ็อบเจ็กต์ที่ซ้อนกัน แต่เป็นคุณสมบัติของรีจิสตรีคีย์เฉพาะ รีจิสตรีคีย์เหล่านั้นสามารถมีพารามิเตอร์จำนวนเท่าใดก็ได้
แสดงรายการเนื้อหาของรีจิสตรีคีย์ปัจจุบันโดยใช้คำสั่ง:
dir
หรือ
Get-ChildItem
คำสั่งได้แสดงข้อมูลเกี่ยวกับรีจิสตรีคีย์ที่ซ้อนกันและคุณสมบัติ แต่ไม่ได้แสดงข้อมูลเกี่ยวกับพารามิเตอร์ SearchOrderConfig ซึ่งเป็นคุณสมบัติของคีย์ปัจจุบัน
ใช้ รับไอเทม cmdlet เพื่อรับพารามิเตอร์ของรีจิสตรีคีย์:
Get-Item .
หรือGet-Item –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
อย่างที่คุณเห็น คีย์ DriverSearching มีพารามิเตอร์เพียงตัวเดียว – SearchOrderConfig ที่มีค่า 1
ในการรับค่าของพารามิเตอร์คีย์รีจิสทรี ให้ใช้ Get-ItemProperty cmdlet
$DriverUpdate = Get-ItemProperty –Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching’
$DriverUpdate.SearchOrderConfig
เราได้ค่าของพารามิเตอร์ SearchOrderConfig คือ 1
การเปลี่ยนค่ารีจิสทรีด้วย PowerShell
หากต้องการเปลี่ยนค่าของพารามิเตอร์ reg SearchOrderConfig ให้ใช้ Set-ItemProperty cmdlet:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0
ตรวจสอบให้แน่ใจว่าค่าพารามิเตอร์มีการเปลี่ยนแปลง:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig
จะสร้างคีย์การลงทะเบียนหรือพารามิเตอร์ใหม่ด้วย PowerShell ได้อย่างไร
ในการสร้างรีจิสตรีคีย์ใหม่ ให้ใช้คำสั่ง New-Item มาสร้างคีย์ใหม่ชื่อ NewKey . กันเถอะ :
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
New-Item –Path $HKCU_Desktop –Name NewKey
ตอนนี้ มาสร้างพารามิเตอร์ใหม่ในรีจิสตรีคีย์ใหม่กัน สมมติว่าเราต้องสร้างพารามิเตอร์สตริงใหม่ประเภท REG_SZ ชื่อ SuperParamString และค่า filetmp1.txt:
New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value ”filetmp1.txt” -PropertyType "String"
- สตริง (REG_SZ)
- ExpandString (REG_EXPAND_SZ)
- MultiString (REG_MULTI_SZ)
- ไบนารี (REG_BINARY)
- DWord (REG_DWORD)
- Qword (REG_QWORD)
- ไม่ทราบ (ประเภทข้อมูลรีจิสทรีที่ไม่รองรับ)
ตรวจสอบให้แน่ใจว่าคีย์และพารามิเตอร์ใหม่ปรากฏในรีจิสทรีแล้ว
จะตรวจสอบได้อย่างไรว่ามีคีย์รีจิสทรีหรือไม่
หากคุณต้องการตรวจสอบว่ามีคีย์รีจิสทรีเฉพาะหรือไม่ ให้ใช้ Test-Path cmdlet:
Test-Path 'HKCU:\Control Panel\Desktop\NewKey'
สคริปต์ PowerShell ต่อไปนี้จะตรวจสอบว่ามีค่ารีจิสทรีเฉพาะหรือไม่ และหากไม่มี ให้สร้างขึ้น
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 ”woshub_test” -PropertyType "String" }
การใช้ คัดลอกรายการ cmdlet คุณสามารถคัดลอกรายการจากรีจิสตรีคีย์หนึ่งไปยังอีกคีย์หนึ่งได้:
$source='HKLM:\SOFTWARE\7-zip\'
$dest = 'HKLM:\SOFTWARE\backup'
Copy-Item -Path $source -Destination $dest -Recurse
หากคุณต้องการคัดลอกทุกอย่าง รวมทั้งคีย์ย่อย ให้เพิ่ม –Recurse สวิตช์
การลบคีย์รีจิสทรีหรือพารามิเตอร์
Remove-ItemProperty คำสั่งใช้เพื่อลบพารามิเตอร์ในรีจิสตรีคีย์ มาลบพารามิเตอร์ SuperParamString ที่สร้างไว้ก่อนหน้านี้:
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
Remove-ItemProperty –Path $HKCU_Desktop\NewKey –Name "SuperParamString"
คุณสามารถลบคีย์รีจิสทรีทั้งหมดที่มีเนื้อหาทั้งหมดได้:
Remove-Item –Path $HKCU_Desktop\NewKey –Recurse
วิธีลบรายการทั้งหมดในคีย์ reg (แต่ไม่ใช่ตัวคีย์เอง):
Remove-Item –Path $HKCU_Desktop\NewKey\* –Recurse
จะเปลี่ยนชื่อคีย์รีจิสทรีหรือพารามิเตอร์ได้อย่างไร
คุณสามารถเปลี่ยนชื่อพารามิเตอร์รีจิสทรีด้วยคำสั่ง:
Rename-ItemProperty –path ‘HKCU:\Control Panel\Desktop\NewKey’ –name "SuperParamString" –newname “OldParamString”
ในทำนองเดียวกัน คุณสามารถเปลี่ยนชื่อรีจิสตรีคีย์ได้:
Rename-Item -path 'HKCU:\Control Panel\Desktop\NewKey' OldKey
ค้นหารีจิสทรีสำหรับคำหลักโดยใช้ PowerShell
PowerShell ช่วยให้คุณค้นหารีจิสทรี ต่อไปนี้จะค้นหา HKCU:\Control Panel\Desktop สำหรับพารามิเตอร์ซึ่งมีชื่อเป็น *dpi * กุญแจ
$Path = (Get-ItemProperty ‘HKCU:\Control Panel\Desktop’)
$Path.PSObject.Properties | ForEach-Object {
If($_.Name -like '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}
หากต้องการค้นหาคีย์รีจิสทรีที่มีชื่อเฉพาะ:
Get-ChildItem -path HKLM:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*woshub*"}
การตั้งค่าการอนุญาตคีย์รีจิสทรีด้วย PowerShell
คุณสามารถรับสิทธิ์ของรีจิสตรีคีย์ปัจจุบันได้โดยใช้ Get-ACL cmdlet (CMdlet Get-ACL ยังอนุญาตให้คุณจัดการสิทธิ์ NTFS ในไฟล์และโฟลเดอร์)
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
$rights.Access.IdentityReference
ในตัวอย่างต่อไปนี้ เราจะแก้ไข ACL ในคีย์รีจิสทรีนี้เพื่อให้สิทธิ์ในการเขียนแก่กลุ่มผู้ใช้ที่มีอยู่แล้วภายใน
รับสิทธิ์ปัจจุบัน:
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
ระบุผู้ใช้หรือกลุ่มที่คุณต้องการให้สิทธิ์การเข้าถึง:
$idRef = [System.Security.Principal.NTAccount]"BuiltIn\Users"
เลือกระดับการเข้าถึง:
$regRights = [System.Security.AccessControl.RegistryRights]::WriteKey
กำหนดการตั้งค่าการสืบทอดสิทธิ์ :
$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::None
ประเภทการเข้าถึง (อนุญาต/ปฏิเสธ):
$acType = [System.Security.AccessControl.AccessControlType]::Allow
สร้างกฎการเข้าถึง:
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
เพิ่มกฎใหม่ให้กับ ACL ปัจจุบัน:
$rights.AddAccessRule($rule)
ใช้การอนุญาตใหม่กับรีจิสตรีคีย์:
$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
ตรวจสอบให้แน่ใจว่ากลุ่มใหม่ปรากฏใน ACL ของคีย์รีจิสทรี
รับค่ารีจิสทรีจากคอมพิวเตอร์ระยะไกลผ่าน PowerShell
PowerShell ช่วยให้คุณเข้าถึงรีจิสทรีของคอมพิวเตอร์ระยะไกลได้ คุณสามารถเชื่อมต่อกับคอมพิวเตอร์ระยะไกลโดยใช้ WinRM (Invoke-Command หรือ Enter-PSSession) ในการรับค่าพารามิเตอร์รีจิสตรีจากคอมพิวเตอร์ระยะไกล:
Invoke-Command –ComputerName srv-fs1 –ScriptBlock {Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}
หรือใช้การเชื่อมต่อรีจิสตรีระยะไกล (ต้องเปิดใช้งานบริการ RemoteRegistry)
$Server = "lon-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")
ดังนั้นเราจึงครอบคลุมตัวอย่างทั่วไปของการใช้ PowerShell เพื่อเข้าถึงและจัดการรายการรีจิสทรีของ Windows คุณสามารถใช้มันในสคริปต์การทำงานอัตโนมัติของคุณ