【问题标题】:VBScript calling powershell, escape character [duplicate]VBScript调用powershell,转义字符[重复]
【发布时间】: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


【解决方案1】:

找到了,很简单,双引号引起了问题,所以我只是在命令中使用了单引号:

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

【讨论】:

  • 你只是没有正确地逃避它们,这也可以在不需要单引号的情况下工作:strExpression="get-printer | Where-Object {$_.DriverName -notlike ""*microsoft*""} | export-csv C:\SAAQ\temp\printers.csv -encoding UTF8 -force"。双引号通过加倍在字符串中进行转义,请参阅duplicate answer
猜你喜欢
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 2013-12-08
  • 1970-01-01
  • 2016-06-26
  • 2021-06-20
相关资源
最近更新 更多