【发布时间】:2014-07-09 02:51:42
【问题描述】:
我正在从 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 脚本来完成?
【问题讨论】:
-
你的变量
$vbsPath是网络路径吗? -
是的,目前VBScript位于远程...如果我将脚本存储在本地会更容易吗?
-
不。只是想问一下,因为 powershell 将网络路径视为远程位置,并且有一种直接的方法可以解决此问题。 stackoverflow.com/questions/728143/… 我看到你已经解决了这个问题,但这仍然值得一读。
-
有用的链接丰富,谢谢..
标签: powershell windows-7 vbscript