VBScript中的WScript.Shell无法在Windows RT上运行

时间:2013-10-02 18:15:42

标签: vbscript windows-rt

在Surface平板电脑上的Windows RT中,我正在运行第一行失败的VB脚本:

Set WshShell = WScript.CreateObject("WScript.Shell")

错误消息显示:

  

无法使用错误代码:80070005

创建对象WScript.Shell

这似乎是与访问权限有关的通用错误代码。有什么想法吗?

我正在使用管理员权限运行。

2 个答案:

答案 0 :(得分:1)

Windows RT(也称为 Windows 8 RT、Windows 8.1 RT 和 Surface RT)使用用户模式代码完整性 (UMCI) 来限制允许运行的软件。

就 VBScript 而言,UMCI 的代码完整性组件仅允许创建“启蒙”的 COM 对象。

“哪些 COM 对象受到启发?”你问。好问题。让我们在 Windows RT 设备上使用 PowerShell 来帮助我们找出答案。

$arrInstances = @(Get-WMIObject -ClassName 'Win32_COMSetting')
$arrCOMObjectProgIDs = @($arrInstances | Where-Object { $null -ne $_.ProgId } |
    ForEach-Object { $_.ProgId })

$ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
$result = @($arrCOMObjectProgIDs | ForEach-Object { if (New-Object -ComObject $_) { $_ } })
$result

在我打完补丁的 Surface 2 设备上,截至今天,即 2021 年 1 月 17 日,唯一具有 ProgID 的开明 COM 对象(即,唯一可从 Windows RT 上的 VBScript 调用的对象)是:

  • Scripting.FileSystemObject
  • VBScript.RegExp
  • 脚本.字典

由于用户模式代码完整性 (UMCI),无法在 Windows RT 上创建其他 VBScript 对象(例如 WScript.Shell、WScript.Network、WinNTSystemInfo、Wbemscripting.SWbemLocator 等)。

要获得上述代码的更强大版本,请查看我发布到我的 GitHub 存储库的脚本“Get-COMObjectsProgIDsAllowedToLaunch.ps1”:https://github.com/franklesniak/PowerShell_Resources

答案 1 :(得分:0)

我在一些地方看到人们评论RT不允许VBScript运行WScript.Shell,但我没有找到任何相关的官方文档。

可能只是脚本需要以管理员权限运行。