Trình chỉnh sửa sổ đăng ký (regedit.exe
) và reg.exe
tiện ích dòng lệnh không phải là công cụ duy nhất để truy cập và quản lý sổ đăng ký trong Windows. PowerShell cung cấp một số lượng lớn các công cụ để quản trị viên tương tác với sổ đăng ký. Sử dụng PowerShell, bạn có thể tạo, sửa đổi hoặc xóa khóa / tham số đăng ký, tìm kiếm giá trị và kết nối với sổ đăng ký trên máy tính từ xa.
Điều hướng Sổ đăng ký Windows Giống như Hệ thống Tệp với PowerShell
Làm việc với sổ đăng ký trong PowerShell tương tự như làm việc với các tệp chung trên đĩa cục bộ. Sự khác biệt chính là trong khái niệm này, các khóa đăng ký tương tự như các tệp và các tham số đăng ký là thuộc tính của các tệp này.
Hiển thị danh sách các ổ đĩa có sẵn trên máy tính của bạn:
get-psdrive
Lưu ý rằng trong số các ổ đĩa (có gán ký tự ổ đĩa) có các thiết bị đặc biệt khả dụng thông qua Nhà cung cấp sổ đăng ký - HKCU (HKEY_CURRENT_USER) và HKLM (HKEY_LOCAL_MACHINE). Bạn có thể duyệt cây đăng ký giống như cách bạn điều hướng ổ đĩa của mình. HKLM:\ và HKCU:\ được sử dụng để truy cập một tổ đăng ký cụ thể.
cd HKLM:\
Dir -ErrorAction SilentlyContinue
Những thứ đó, bạn có thể truy cập vào khóa đăng ký và các tham số của chúng bằng cách sử dụng cùng các lệnh ghép ngắn PowerShell mà bạn sử dụng để quản lý tệp và thư mục.
Để tham chiếu đến khóa đăng ký, hãy sử dụng lệnh ghép ngắn với xxx-Item :
-
Get-Item
- lấy một khóa đăng ký -
New-Item
- tạo khóa đăng ký mới -
Remove-Item
- xóa khóa đăng ký
Các tham số đăng ký nên được coi là thuộc tính của khóa đăng ký (tương tự như thuộc tính tệp / thư mục). xxx -ItemProperty lệnh ghép ngắn được sử dụng để quản lý các thông số đăng ký:
-
Get-ItemProperty
- nhận giá trị của một tham số đăng ký -
Set-ItemProperty
- thay đổi giá trị của một tham số đăng ký -
New-ItemProperty
- tạo tham số đăng ký -
Rename-ItemProperty
- đổi tên tham số -
Remove-ItemProperty
- loại bỏ tham số đăng ký
Bạn có thể điều hướng đến khóa đăng ký cụ thể (ví dụ:đến khóa chịu trách nhiệm về cài đặt cập nhật trình điều khiển tự động) bằng cách sử dụng một trong hai lệnh:
cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
hoặc
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
Nhận Giá trị Tham số Đăng ký qua PowerShell
Xin lưu ý rằng các tham số được lưu trữ trong khóa đăng ký không phải là các đối tượng lồng nhau, mà là một thuộc tính của một khóa đăng ký cụ thể. Bất kỳ khóa đăng ký nào cũng có thể có bất kỳ số lượng tham số nào.
Liệt kê nội dung của khóa đăng ký hiện tại bằng lệnh:
dir
Hoặc
Get-ChildItem
Lệnh đã hiển thị thông tin về các khóa đăng ký lồng nhau và các thuộc tính của chúng. Nhưng không hiển thị thông tin về thông số SearchOrderConfig, là một thuộc tính của khóa hiện tại.
Sử dụng Get-Item lệnh ghép ngắn để lấy các tham số của khoá đăng ký:
Get-Item .
Hoặc
Get-Item –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
Như bạn thấy, khóa DriverSearching chỉ có một tham số - SearchOrderConfig với giá trị là 1.
Để nhận giá trị của tham số khóa đăng ký, hãy sử dụng lệnh ghép ngắn Get-ItemProperty.
$DriverUpdate = Get-ItemProperty –Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching’
$DriverUpdate.SearchOrderConfig
Chúng tôi nhận thấy rằng giá trị của tham số SearchOrderConfig là 1.
Thay đổi giá trị sổ đăng ký bằng PowerShell
Để thay đổi giá trị của tham số reg SearchOrderConfig, hãy sử dụng lệnh ghép ngắn Set-ItemProperty:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0
Đảm bảo rằng giá trị tham số đã thay đổi:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig
Làm cách nào để tạo một tham số hoặc khóa đăng ký mới với PowerShell?
Để tạo khóa đăng ký mới, hãy sử dụng lệnh Mục mới. Hãy tạo một khóa mới với tên NewKey :
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
New-Item –Path $HKCU_Desktop –Name NewKey
Bây giờ, hãy tạo một tham số mới trong một khóa đăng ký mới. Giả sử chúng ta cần tạo một tham số chuỗi mới kiểu REG_SZ có tên là SuperParamString và giá trị filetmp1.txt:
New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value ”filetmp1.txt” -PropertyType "String"
- Chuỗi (REG_SZ)
- Chuỗi mở rộng (REG_EXPAND_SZ)
- Đa chuỗi (REG_MULTI_SZ)
- Nhị phân (REG_BINARY)
- DWord (REG_DWORD)
- Qword (REG_QWORD)
- Không xác định (kiểu dữ liệu đăng ký không được hỗ trợ)
Đảm bảo rằng khóa và tham số mới đã xuất hiện trong sổ đăng ký.
Cách kiểm tra xem khóa đăng ký có tồn tại không?
Nếu bạn cần kiểm tra xem khóa đăng ký cụ thể có tồn tại hay không, hãy sử dụng Đường dẫn kiểm tra lệnh ghép ngắn:
Test-Path 'HKCU:\Control Panel\Desktop\NewKey'
Tập lệnh PowerShell sau sẽ kiểm tra xem một giá trị đăng ký cụ thể có tồn tại hay không và nếu không, hãy tạo nó.
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" }
Sử dụng Mục sao chép cmdlet, bạn có thể sao chép các mục nhập từ khóa đăng ký này sang khóa đăng ký khác:
$source='HKLM:\SOFTWARE\7-zip\'
$dest = 'HKLM:\SOFTWARE\backup'
Copy-Item -Path $source -Destination $dest -Recurse
Nếu bạn muốn sao chép mọi thứ, bao gồm cả các khóa con, hãy thêm –Recurse chuyển đổi.
Xóa tham số hoặc khóa đăng ký
Thuộc tính loại bỏ mục được sử dụng để loại bỏ một tham số trong khóa đăng ký. Hãy xóa tham số SuperParamString đã tạo trước đó:
$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
Remove-ItemProperty –Path $HKCU_Desktop\NewKey –Name "SuperParamString"
Bạn có thể xóa toàn bộ khóa đăng ký với tất cả nội dung của nó:
Remove-Item –Path $HKCU_Desktop\NewKey –Recurse
Để xóa tất cả các mục trong khóa reg (nhưng không phải chính khóa):
Remove-Item –Path $HKCU_Desktop\NewKey\* –Recurse
Làm cách nào để đổi tên Khóa đăng ký hoặc Tham số?
Bạn có thể đổi tên tham số đăng ký bằng lệnh:
Rename-ItemProperty –path ‘HKCU:\Control Panel\Desktop\NewKey’ –name "SuperParamString" –newname “OldParamString”
Theo cách tương tự, bạn có thể đổi tên khóa đăng ký:
Rename-Item -path 'HKCU:\Control Panel\Desktop\NewKey' OldKey
Đăng ký tìm kiếm cho từ khóa bằng PowerShell
PowerShell cho phép bạn tìm kiếm sổ đăng ký. Phần tiếp theo tìm kiếm HKCU:\ Control Panel \ Desktop để tìm các tham số, có tên chứa * dpi phím *.
$Path = (Get-ItemProperty ‘HKCU:\Control Panel\Desktop’)
$Path.PSObject.Properties | ForEach-Object {
If($_.Name -like '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}
Để tìm khóa đăng ký có tên cụ thể:
Get-ChildItem -path HKLM:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*woshub*"}
Đặt quyền đối với khóa đăng ký với PowerShell
Bạn có thể nhận các quyền của khóa đăng ký hiện tại bằng cách sử dụng lệnh ghép ngắn Get-ACL (lệnh ghép ngắn Get-ACL cũng cho phép bạn quản lý các quyền NTFS trên tệp và thư mục).
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
$rights.Access.IdentityReference
Trong ví dụ sau, chúng tôi sẽ sửa đổi ACL trong khóa đăng ký này để cấp quyền ghi vào nhóm Người dùng tích hợp sẵn.
Nhận các quyền hiện tại:
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
Chỉ định người dùng hoặc nhóm bạn muốn cấp quyền truy cập:
$idRef = [System.Security.Principal.NTAccount]"BuiltIn\Users"
Chọn cấp độ truy cập:
$regRights = [System.Security.AccessControl.RegistryRights]::WriteKey
Đặt cài đặt kế thừa quyền:
$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::None
Loại truy cập (Cho phép / Từ chối):
$acType = [System.Security.AccessControl.AccessControlType]::Allow
Tạo quy tắc truy cập:
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
Thêm quy tắc mới vào ACL hiện tại:
$rights.AddAccessRule($rule)
Áp dụng các quyền mới cho khóa đăng ký:
$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
Đảm bảo rằng nhóm mới xuất hiện trong ACL của khóa đăng ký.
Nhận Giá trị đăng ký từ Máy tính Từ xa qua PowerShell
PowerShell cho phép bạn truy cập sổ đăng ký của một máy tính từ xa. Bạn có thể kết nối với một máy tính từ xa bằng WinRM (Invoke-Command hoặc Enter-PSSession). Để nhận giá trị của tham số đăng ký từ máy tính từ xa:
Invoke-Command –ComputerName srv-fs1 –ScriptBlock {Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}
Hoặc sử dụng kết nối đăng ký từ xa (dịch vụ RemoteRegistry phải được bật)
$Server = "lon-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")
Vì vậy, chúng tôi đã đề cập đến các ví dụ điển hình về việc sử dụng PowerShell để truy cập và quản lý các mục đăng ký Windows. Bạn có thể sử dụng chúng trong các tập lệnh tự động hóa của mình.