我正在尝试将一个通用的vbScript实用程序整合在一起,以便在隐藏的窗口中启动PowerShell脚本,因为Microsoft尚未为此提供一种不错的机制。我希望它支持PowerShell的任意参数,因此我需要能够将代表Powershell多个参数的字符串作为单个参数传递给vbScript。
-path:"C:\folder name" -message:"Test message"
但是,似乎vbScript正在清除参数本身中的引号。为了测试这一点,我有这个PS1 ...
$helperScript = "`"\\Mac\iCloud Drive\Px Tools\Dev 4.0\#Spikes\Helper\ArgumentTest.vbs`"" $vbArguments = "/Arguments:-message:`"`"Test message`"`"" $arguments ="$helperScript $vbArguments" Start-Process -filePath:cscript.exe -argumentList:$arguments
还有这个VBS ...
Option Explicit Wscript.Echo """Test for quotes""" Wscript.Echo WScript.Arguments.Named("Arguments") WScript.Sleep(5000)
$helperScript
中的转义引号按预期工作,允许Start-Process
使用Wscript引擎运行VBS。 VBS中的第一个Wscript.Echo
验证将显示VBS文件中转义的双引号。我的目标是让第二个Wscript.Echo
显示
-message:“测试消息”
在PS1上,我尝试了多种不同的方式将内引号转义
$vbArguments = "/Arguments:-message:`"Test message`"" $vbArguments = "/Arguments:-message:""Test message""" $vbArguments = "/Arguments:-message:`"`"Test message`"`"" $vbArguments = "/Arguments:-message:`"`"`"Test message`"`"`""
在所有情况下,内部双引号都被删除。我可以建立自己的转义代码,例如
~
,就像这样...
$vbArguments = "/Arguments:-message:~Test message~"
然后在VBS端查找/替换。但是后来我失去了该字符以供实际使用。我认为这实际上是可能的,而我只是做错了什么。我希望。
编辑:好的,我找到了一个解决方案,但希望有人可以提出一些建议……丑陋。在PS1上,我需要三重双引号以正确维护空格,并且我需要提供单引号,像这样...
$vbArguments = "/Arguments:-message:`"`"`"'Test message`"`"`"'"
然后在VBS上,我需要用
chr(34)
替换单引号,像这样...
DIM replaced :replaced = Replace(WScript.Arguments.Named("Arguments"), "'", chr(34))
对于发往PowerShell的两个参数的原始示例,三元转义的双引号将整个参数字符串包装起来,在该字符串中使用单引号,最终我们将需要双引号。像这样...
$vbArguments = "/Arguments:-path:`"`"`"'C:\folder name' -message:'Test message`"`"`"'"
最后我需要测试,但是我认为PowerShell在命令行中需要双引号,并且内部仅支持单引号。但我会调查一下。仍然,对于所有不喜欢浮躁的人的爱,这真的是将这些融合在一起的唯一方法吗? gh
我正在尝试将一个通用的vbScript实用程序整合在一起,以便在隐藏的窗口中启动PowerShell脚本,因为Microsoft尚未为此提供一种不错的机制。我希望它支持...
在powershell中,我们需要用另一个引号将引号引起来。像这样;