रजिस्ट्री संपादक (regedit.exe) और कमांड-लाइन उपयोगिता reg.exe Windows में रजिस्ट्री तक पहुंचने और प्रबंधित करने के एकमात्र टूल नहीं हैं। PowerShell प्रशासक को रजिस्ट्री के साथ इंटरैक्ट करने के लिए बड़ी संख्या में टूल प्रदान करता है। PowerShell का उपयोग करके, आप रजिस्ट्री कुंजी/पैरामीटर्स बना सकते हैं, संशोधित कर सकते हैं या हटा सकते हैं, मान खोज सकते हैं, और रिमोट कंप्यूटर पर रजिस्ट्री से कनेक्ट कर सकते हैं।
PowerShell के साथ Windows रजिस्ट्री को फ़ाइल सिस्टम की तरह नेविगेट करें
PowerShell में रजिस्ट्री के साथ काम करना स्थानीय डिस्क पर सामान्य फ़ाइलों के साथ काम करने के समान है। मुख्य अंतर यह है कि इस अवधारणा में रजिस्ट्री कुंजियाँ फ़ाइलों के अनुरूप हैं, और रजिस्ट्री पैरामीटर्स इन फ़ाइलों के गुण हैं।
अपने कंप्यूटर पर उपलब्ध ड्राइव्स की सूची प्रदर्शित करें:
get-psdrive
ध्यान दें कि ड्राइव्स (असाइन किए गए ड्राइव अक्षरों के साथ) के बीच रजिस्ट्री प्रदाता के माध्यम से उपलब्ध विशेष डिवाइस हैं - HKCU (HKEY_CURRENT_USER) और HKLM (HKEY_LOCAL_MACHINE)। आप रजिस्ट्री ट्री को उसी तरह ब्राउज़ कर सकते हैं जैसे आप अपने ड्राइव्स को नेविगेट करते हैं। किसी विशिष्ट रजिस्ट्री हाइव तक पहुंचने के लिए HKLM:\ और HKCU:\ का उपयोग किया जाता है।
cd HKLM:\
Dir -ErrorAction SilentlyContinue
इस प्रकार, आप उन्हीं PowerShell कमांडलेट्स का उपयोग करके रजिस्ट्री कुंजियों और उनके पैरामीटर्स तक पहुंच सकते हैं जिनका उपयोग आप फ़ाइलों और फ़ोल्डर्स को प्रबंधित करने के लिए करते हैं।
रजिस्ट्री कुंजियों को संदर्भित करने के लिए, xxx-Item वाले कमांडलेट्स का उपयोग करें:
Get-Item- रजिस्ट्री कुंजी प्राप्त करेंNew-Item- नई रजिस्ट्री कुंजी बनाएंRemove-Item- रजिस्ट्री कुंजी हटाएं
रजिस्ट्री पैरामीटर्स को रजिस्ट्री कुंजी के गुणों के रूप में माना जाना चाहिए (फ़ाइल/फ़ोल्डर गुणों के समान)। xxx-ItemProperty कमांडलेट्स का उपयोग रजिस्ट्री पैरामीटर्स को प्रबंधित करने के लिए किया जाता है:
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 पैरामीटर के बारे में जानकारी प्रदर्शित नहीं की, जो वर्तमान कुंजी का एक गुण है।
रजिस्ट्री कुंजी के पैरामीटर्स प्राप्त करने के लिए Get-Item कमांडलेट का उपयोग करें:
Get-Item .
या
Get-Item –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
जैसा कि आप देख सकते हैं, DriverSearching कुंजी में केवल एक पैरामीटर है - SearchOrderConfig जिसका मान 1 है।
रजिस्ट्री कुंजी पैरामीटर का मान प्राप्त करने के लिए, Get-ItemProperty कमांडलेट का उपयोग करें।
$DriverUpdate = Get-ItemProperty –Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching’
$DriverUpdate.SearchOrderConfig
हमने प्राप्त किया कि SearchOrderConfig पैरामीटर का मान 1 है।
PowerShell के साथ रजिस्ट्री मान बदलना
SearchOrderConfig रजिस्ट्री पैरामीटर का मान बदलने के लिए, Set-ItemProperty कमांडलेट का उपयोग करें:
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"
आप रजिस्ट्री पैरामीटर्स के लिए निम्न डेटा प्रकारों का उपयोग कर सकते हैं:
- String (REG_SZ)
- ExpandString (REG_EXPAND_SZ)
- MultiString (REG_MULTI_SZ)
- Binary (REG_BINARY)
- DWord (REG_DWORD)
- Qword (REG_QWORD)
- Unknown (असमर्थित रजिस्ट्री डेटा प्रकार)
सुनिश्चित करें कि नई कुंजी और पैरामीटर रजिस्ट्री में दिखाई दिए हैं।
रजिस्ट्री कुंजी मौजूद है या नहीं, इसकी जांच कैसे करें?
यदि आपको जांचने की आवश्यकता है कि कोई विशिष्ट रजिस्ट्री कुंजी मौजूद है या नहीं, तो Test-Path कमांडलेट का उपयोग करें:
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" }
Copy-Item कमांडलेट का उपयोग करके, आप एक रजिस्ट्री कुंजी से दूसरी में प्रविष्टियों को कॉपी कर सकते हैं:
$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
नोट: –Recurse स्विच इंगित करता है कि सभी सबकुंजियों को पुनरावर्ती रूप से हटाया जाना चाहिए।
रजिस्ट्री कुंजी में सभी आइटम्स को हटाने के लिए (लेकिन कुंजी को नहीं):
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 कमांडलेट का उपयोग करके वर्तमान रजिस्ट्री कुंजी अनुमतियाँ प्राप्त कर सकते हैं (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
एक्सेस प्रकार (Allow/Deny):
$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")
सुझाव: यदि आपको कई डोमेन कंप्यूटर्स पर एक निश्चित रजिस्ट्री पैरामीटर बनाने/संशोधित करने की आवश्यकता है, तो GPO सुविधाओं का उपयोग करना आसान है।
इस प्रकार हमने PowerShell का उपयोग करके Windows रजिस्ट्री प्रविष्टियों तक पहुंचने और प्रबंधित करने के विशिष्ट उदाहरणों को कवर किया है। आप उन्हें अपने ऑटोमेशन स्क्रिप्ट्स में उपयोग कर सकते हैं।