Powershell可以使用文件操作API來操作注冊表,注冊表項就類似於Windows的文件夾。
如下是一個簡單的示例:
上述例子就演示了利用cd指令(Set-Location)設置當前的注冊表路徑, 然后通過dir指令(Get-ChildItem)獲取所有的子項。
注冊表項API
在Powershell中,注冊表項基本上和文件夾是對等的,可以使用文件夾操作相關API來操作注冊表項。通常的操作有:
-
新建項: New-Item (mkdir、ni)
-
重命名項: Rename-Item (ren、rni)
-
刪除項: Remove-Item (rm)
-
獲取子項: Get-ChildItem (dir)
例如,我們可以用New-Item來創建一個注冊表項。
New-Item Item3
由於注冊表的Item只有一個類型,因此無需像用New-Item創建文件夾那樣要指定Type參數。
另外,mkdir這種直接創建文件夾的api對於創建注冊表項也是有效的,非常方便。
注冊表值API
注冊表值並不是對應的文件的,而是ItemProperty。我們可以用ItemPropertyAPI就行注冊表的值操作:
-
獲取所有值: Get-ItemProperty
-
寫入值: Set-ItemProperty
-
重命名: Rename-ItemProperty
-
刪除值: Remove-ItemProperty
簡單的示例如下:
Set-ItemProperty -Path "." -Name "link" -Type "DWord" -Value 23
Get-ItemPropertyValue -Path "." -Name "link"
Rename-ItemProperty -Path "." -Name "link" -NewName "link2"
我這里用的還是相對比完整的命令行,實際應用中可以簡化一下,例如
Set-ItemProperty "." "link" 23
Rename-ItemProperty "." "link" "link2"
默認值
對於Property的訪問,需要傳入Name作為參數的,但注冊表項是有一個特殊的Name默認值的
對於這個值,我么可以用特殊的名稱"(default)"來訪問它。
Set-ItemProperty -Path "." -Name "(default)" -Type "DWord" -Value 23
對象訪問
在程序中對於值的讀寫的時候,用Object訪問更為方便些。
$a = Get-ItemProperty "."
echo $a.link
$a.link = 256
值類型
在注冊表中,值有不同的類型,我們可以不指定類型,讓它自動識別。
Set-ItemProperty "." "link" "hello"
Set-ItemProperty "." "link" 323
同時,也可以主動指定Type類型:
Set-ItemProperty -Path "." -Name "link" -Type "DWord" -Value 23
注冊表支持如下幾種Type類型:
-
String: REG_SZ.
-
ExpandString: REG_EXPAND_SZ.
-
Binary: REG_BINARY.
-
DWord: REG_DWORD.
-
MultiString: REG_MULTI_SZ.
-
Qword: REG_QWORD.
-
Unknown: REG_RESOURCE_LIST.
參考文章: