我在Windows Server 2012上导入.reg文件时遇到问题。该脚本适用于Server 2008,在PowerShell提示符下输入时有效,并且在"双击"在Server 2012实例上。
该脚本解压缩包含.reg文件的文件,然后将它们导入注册表。
Write-Output "Unzipping AUX Package"
Unzip-File -File "$DOWNLOAD_DIR\$S3_AUX_PACKAGE" -Destination $destinationFolder
Write-Output "Done unzipping AUX Package"
# Import registry files in the AUX archive package
$registryFiles = Get-ChildItem $destinationFolder | where {$_.extension -eq ".reg"}
$registryFiles = $registryfiles | % {$_.Name}
foreach ($regfile in $registryfiles) {
move "$destinationFolder\$regfile" "$DOWNLOAD_DIR"
$cmd = "regedit /s `"$DOWNLOAD_DIR\$regfile`" "
Write-Output "$cmd"
invoke-expression $cmd
}
我可以看到写输出条目中出现正确的参数和文件名:
Unzipping AUX Package
09:30:08: Done unzipping AUX Package
09:30:09: regedit /s "c:\\downloads\ControlSet001-110-64.reg"
09:30:11: regedit /s "c:\\downloads\CurrentControlSet110-64.reg"
09:30:11: regedit /s "c:\\downloads\HKCU110-64.reg"
09:30:11: regedit /s "c:\\downloads\HKLM110-64.reg"
但它似乎只是导入前两个.reg文件 - 两个ControlSet文件。另外两个" HKCU"和" HKLM"根本不进口。
这些是这些REG文件尝试写入的路径:
ControlSet001-110-64.reg - HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\AdminService11.0
CurrentControlSet110-64.reg - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AdminService11.0
HKCU110-64.reg - HKEY_CURRENT_USER\SOFTWARE\PSC
HKLM110-64.reg - HKEY_LOCAL_MACHINE\SOFTWARE\PSC
在另一个脚本中,我能够导入REG文件以写入HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\
这很奇怪,因为我无法写入它的父节点SOFTWARE
我使用regedit /s
或reg import
获得相同的结果。
我该如何调查此问题?有什么指针吗?我可以调试单个PowerShell行 - 可能是详细输出吗? PowerShell是否具有导入注册表文件的等效项?请帮忙!
答案 0 :(得分:3)
你为什么要这么复杂? Get-ChildItem
cmdlet返回FileInfo
个对象,这些对象的属性FullName
具有项目的完整路径,在本例中为.reg
个文件。
这应该有效:
Write-Output "Unzipping AUX Package"
Unzip-File -File "$DOWNLOAD_DIR\$S3_AUX_PACKAGE" -Destination $destinationFolder
Write-Output "Done unzipping AUX Package"
Get-ChildItem $destinationFolder | ? { $_.Extension -eq '.reg' } | % {
& reg import $_.FullName
}
请注意,您需要以管理员身份运行此操作"能够写信给HKLM。