【发布时间】:2019-04-08 23:28:58
【问题描述】:
我认为这是转义某些字符的问题。
我有这个 VBScript 用于在没有窗口的情况下静默调用 PowerShell 命令(第 3 行):
Dim objShell
Set objShell=CreateObject("WScript.Shell")
strExpression="get-printer | Where-Object {$_.DriverName -notlike "*microsoft*"} | export-csv C:\x\temp\printers.csv -encoding UTF8 -force"
strCMD="powershell -sta -noProfile -NonInteractive -executionpolicy Bypass -nologo -command " & Chr(34) &_
"&{" & strExpression &"}" & Chr(34)
objShell.Run strCMD,0
这给了我这个错误:
错误:类型不兼容:'[字符串:“get-printer | Where-”]'
代码:800A000D
如果我删除 Where-Object 并执行以下操作:
strExpression="get-printer | export-csv C:\x\temp\printers.csv -encoding UTF8 -force"
效果很好。
似乎有什么问题,VBScript 中用来“转义”的字符是什么?
【问题讨论】:
-
想知道,您有什么理由同时使用 VBScript 和 PS 吗?比如有什么你可以在 VBS 而不是 int PS 中做的事情吗?
-
@MikeTwc 使用
-executionpolicy Bypass启动 Powershell 是 Powershell 无法做到的事情之一。 ;-) -
目标是在当前用户配置文件中运行计划任务。如果以这种方式运行 PowerShell 命令,用户将看到一个窗口闪烁,即使 WindowStyle Hidden 也是如此。因此,为此,您可以让计划任务调用这个包含 PowerShell 命令的 VBS。您从当前用户会话中获取您的信息,而他没有看到任何东西。对于收集用户环境中当前连接的打印机非常有用。
标签: powershell vbscript escaping