我有一个bat文件,我需要用它来调用powershell脚本。
我需要将这个powershell脚本传递给jdbc连接字符串,该字符串有很多括号和@' s。我做了一个简单的例子来解释我的问题。
我的test.bat如下:
@PowerShell.exe -Command "C:\off_desk\ci\test\test.ps1 %1 %2 %3 %4 %5 %6 %7 %8 %9"
我在test.ps1中使用它,如下所示:
Param(
[string]$one
)
Write-Host "Got $one"
当我跑步时:
test jdbc:oracle:thin:@(DESCRIPTION=(enable=broken)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=cc-rjmetcal)(PORT=1521)))(CONNECT_DATA=(service_name=CITESTDB_001))))
我收到错误:
Missing closing ')' in expression.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndParenthesisInExpression
我试过用引号运行:
test "jdbc:oracle:thin:@(DESCRIPTION=(enable=broken)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=cc-rjmetcal)(PORT=1521)))(CONNECT_DATA=(service_name=CITESTDB_001))))"
但这也是错误。
我尝试过很多在互联网上找到的东西。用@ and @" and various other things. None worked. I am limited by what a bat can do so I can't search the string for all the escape chars and prefix them with
围绕它。
有没有人有解决方案?
答案 0 :(得分:1)
经过测试和搜索,我发现@
和括号都没有引起问题,但是等号。
在this post中是一种解决方法:
将您的连接字符串包含在第一个单引号和双引号中,如下所示:
'"connectionstring goes here"'
以你的方式工作(命令行 - >批处理文件 - > powershell),这似乎正常工作。
答案 1 :(得分:1)
更改test.bat,使其包含传递给PowerShell的参数的单引号。像以前一样用双引号运行(指定一个参数,不需要%2 %3
等)
@PowerShell.exe -Command "C:\off_desk\ci\test\test.ps1 '%1'"