发现这个 PowerShell 脚本很困难:
|
|__SyncRootManager
|
|____OneDrive!S-1-5-21-SID
| |_____UserSyncRoots
|
|____OneDrive!S-1-5-21-SID
|_____UserSyncRoots
对于作为 OneDrive!S-1-5-21-SID 子项的每个名为“UserSyncRoots”的子项(它们是“HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager”的子项), 它只包含一个名为“S-1-5-21-SID”的注册表值 - 我如何将每个注册表值修改为“C:\AnyOldPath”
我在
Get-ChildItem
循环中使用 foreach
,但我认为我完全走错了路。感谢您提供的任何帮助。
编辑,哎呀,忘了添加我的代码
$registry = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager" -Recurse
Foreach($a in $registry) {
if ( $a.PSChildName -eq "UserSyncRoots" )
{
$subkeys = (Get-ItemProperty $a.pspath)
#Get-ItemProperty - OK I'm lost here
}
}
未经测试(没有这些密钥),但假设没有权限问题,这应该可以工作或接近:
### Good idea to use single quotes unless string expansion is needed
$keyPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager'
$TargetEnty = 'S-1-5-21-SID'
$NewValue = 'C:\AnyOldPath'
Get-ChildItem $keyPath -Recurse |
where PSChildName -eq 'UserSyncRoots' |
ForEach-Object {
$splat = @{
'Path' = $_.PSPath
'Name' = $TargetEnty
'Value' = $NewValue
'Type' = 'String'
}
Set-ItemPropertyValue @splat
}
请注意(根据您的问题)没有对条目是否存在或当前值进行测试 - 如果存在,则其值会更改,如果不存在,则会创建。
DWORD
) 是可选的,但对于其他类型是必需的。