VBScript调用powershell,转义字符

VBScript调用powershell,转义字符,powershell,vbscript,escaping,Powershell,Vbscript,Escaping,我认为这是转义某些字符的问题 我使用此VBScript在没有窗口的情况下无声地调用PowerShell命令(第3行): Dim objShell 设置objShell=CreateObject(“WScript.Shell”) strExpression=“get printer | Where Object{$\uu.DriverName-notlike”*microsoft*“}|导出csv C:\x\temp\printers.csv-编码UTF8-force” strCMD=“power

我认为这是转义某些字符的问题

我使用此VBScript在没有窗口的情况下无声地调用PowerShell命令(第3行):

Dim objShell
设置objShell=CreateObject(“WScript.Shell”)
strExpression=“get printer | Where Object{$\uu.DriverName-notlike”*microsoft*“}|导出csv C:\x\temp\printers.csv-编码UTF8-force”
strCMD=“powershell-sta-noProfile-NonInteractive-executionpolicy Bypass-nologo-command”&Chr(34)&_
“&{”&strExpression&“}”&Chr(34)
运行strCMD,0
这给了我一个错误:

错误:键入不兼容:“[string:“获取打印机|其中-”]”,
代码:800A000D

如果删除Where对象,只需执行以下操作:

strExpression="get-printer | export-csv C:\x\temp\printers.csv -encoding UTF8 -force"
它很好用


出现了什么问题?VBScript中用于“转义”的字符是什么?

发现了它,非常简单,双引号导致了问题,所以我在命令中使用了单引号:

strExpression="get-printer | Where-Object {$_.DriverName -notlike '*microsoft*'} | export-csv C:\x\temp\printers.csv -encoding UTF8 -force"

想知道,你为什么同时使用VBScript和PS?比如说,在VBS中可以执行某些操作而不是int PS吗?@MikeTwc使用
-executionpolicy Bypass
启动Powershell是Powershell无法执行的操作之一目标是在当前用户配置文件中运行计划任务。如果以这种方式运行PowerShell命令,用户将看到窗口闪烁,即使WindowsStyle已隐藏。因此,您可以让计划任务调用包含PowerShell命令的VBS。你从当前用户会话中获取信息,而他看不到任何信息。在用户环境中收集当前连接的打印机非常有用。您只是没有正确地将它们转义,这也可以在不使用所需单引号的情况下工作:
strExpression=“get printer | Where Object{$\ uu.DriverName-notlike”“*microsoft*”}导出csv C:\SAAQ\temp\printers.csv-encoding UTF8-force”
。双引号在字符串中通过加倍进行转义,请参见。