Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

PowerShell:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

ตัวแก้ไขรีจิสทรี (regedit.exe ) และ reg.exe ยูทิลิตีบรรทัดคำสั่งไม่ได้เป็นเพียงเครื่องมือเดียวในการเข้าถึงและจัดการรีจิสทรีใน Windows PowerShell มีเครื่องมือจำนวนมากสำหรับผู้ดูแลระบบในการโต้ตอบกับรีจิสทรี เมื่อใช้ PowerShell คุณสามารถสร้าง แก้ไข หรือลบรีจิสตรีคีย์/พารามิเตอร์ ค้นหาค่า และเชื่อมต่อกับรีจิสตรีบนคอมพิวเตอร์ระยะไกล

ไปที่ Windows Registry เหมือนกับระบบไฟล์ที่มี PowerShell

การทำงานกับรีจิสทรีใน PowerShell นั้นคล้ายคลึงกับการทำงานกับไฟล์ทั่วไปบนดิสก์ในเครื่อง ข้อแตกต่างที่สำคัญคือในแนวคิดนี้ รีจิสตรีคีย์จะคล้ายคลึงกับไฟล์ และพารามิเตอร์รีจิสตรี้คือคุณสมบัติของไฟล์เหล่านี้

แสดงรายการไดรฟ์ที่มีในคอมพิวเตอร์ของคุณ:

get-psdrive

PowerShell:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

โปรดทราบว่าในไดรฟ์ (โดยกำหนดอักษรระบุไดรฟ์) มีอุปกรณ์พิเศษที่พร้อมใช้งานผ่านผู้ให้บริการรีจิสทรี – HKCU (HKEY_CURRENT_USER) และ HKLM (HKEY_LOCAL_MACHINE) คุณสามารถเรียกดูแผนผังรีจิสตรีได้ในลักษณะเดียวกับการไปยังส่วนต่างๆ ของไดรฟ์ HKLM:\ และ HKCU:\ ใช้เพื่อเข้าถึงกลุ่มรีจิสทรีเฉพาะ

cd HKLM:\
Dir -ErrorAction SilentlyContinue

PowerShell:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

คุณสามารถเข้าถึงรีจิสตรีคีย์และพารามิเตอร์โดยใช้ 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

PowerShell:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

ในการรับค่าของพารามิเตอร์คีย์รีจิสทรี ให้ใช้ Get-ItemProperty cmdlet

$DriverUpdate = Get-ItemProperty –Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching’
$DriverUpdate.SearchOrderConfig

PowerShell:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

เราได้ค่าของพารามิเตอร์ 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:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

จะสร้างคีย์การลงทะเบียนหรือพารามิเตอร์ใหม่ด้วย 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)
  • ไม่ทราบ (ประเภทข้อมูลรีจิสทรีที่ไม่รองรับ)

ตรวจสอบให้แน่ใจว่าคีย์และพารามิเตอร์ใหม่ปรากฏในรีจิสทรีแล้ว

PowerShell:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

จะตรวจสอบได้อย่างไรว่ามีคีย์รีจิสทรีหรือไม่

หากคุณต้องการตรวจสอบว่ามีคีย์รีจิสทรีเฉพาะหรือไม่ ให้ใช้ 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

PowerShell:รับ แก้ไข สร้าง และลบคีย์รีจิสทรีหรือพารามิเตอร์

ในตัวอย่างต่อไปนี้ เราจะแก้ไข 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

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")

เคล็ดลับ . ถ้าคุณต้องสร้าง/แก้ไขพารามิเตอร์รีจิสทรีบางอย่างบนคอมพิวเตอร์โดเมนจำนวนหนึ่ง การใช้คุณลักษณะ GPO จะง่ายกว่า

ดังนั้นเราจึงครอบคลุมตัวอย่างทั่วไปของการใช้ PowerShell เพื่อเข้าถึงและจัดการรายการรีจิสทรีของ Windows คุณสามารถใช้มันในสคริปต์การทำงานอัตโนมัติของคุณ