我正在从PowerShell脚本运行VBScript,试图自动化组件注册。
我的功能如下:
function Register-NaviLink ($vbsPath, $vbsName) {
# Run register.vbs
$register=$vbsPath+"\"+$vbsName
Start-Process $register
}
这可以正常运行(它运行VBScript)但是,由于PowerShell脚本的目的是实现进程的自动化,所以当VBScript触发时,我宁愿不要面对“文件打开 - 安全警告”对话框
为了解决此问题,我创建了一个新的注册表项“HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Associations”,其值为“LowRiskFileTypes”,数据为“.vbs”。重新启动后,PowerShell脚本可以在没有警告对话框的情况下运行VBScript。
但是,考虑到永久保留新的注册表项会给恶意.vbs脚本带来安全风险,我尝试将注册表项的创建和删除合并到我的PowerShell脚本中,如下所示:
function Register-NaviLink ($vbsPath, $vbsName) {
$workingDirectory=pwd
$registryKey="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Associations"
$registryKeyName="LowRiskFileTypes"
$registryKeyValue=".vbs"
Set-Location HKCU:
if(-not(Test-Path ($registryKey))) {
New-Item -Path $registryKey
New-ItemProperty -Path $registryKey -Name $registryKeyName -Value $registryKeyValue
}
$register=$vbsPath+"\"+$vbsName
Start-Process $register
Remove-Item -Path $registryKey -force
Set-Location $workingDirectory
}
PS脚本运行正常(没有错误)但是创建和删除注册表项似乎对安全警告对话框没有影响而没有重新启动。
是否可以在不重启的情况下刷新注册表项?
如果是这样,可以通过PowerShell脚本来完成吗?
答案 0 :(得分:0)
尽管重新启动以应用更改,您是否可以在第一时间尝试重新启动Windows shell(explorer.exe)。如果它工作,你只需发送一个事件,要求shell重新加载关联。