【问题标题】:Running VBScript from PowerShell without "File Open - Security Warning"在没有“文件打开 - 安全警告”的情况下从 PowerShell 运行 VBScript
【发布时间】: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


【解决方案1】:

尽管重新启动以应用您的更改,您能否在第一次尝试重新启动 Windows shell (explorer.exe)。如果它有效,你只需要发送一个事件来要求 shell 重新加载关联。

【讨论】:

  • 问题似乎已经通过启动一个新的 PowerShell 实例并从新实例执行 VBScript 得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2010-11-08
  • 2017-07-18
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
相关资源
最近更新 更多