Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止将参数格式化为PowerShell中的命令?_Powershell - Fatal编程技术网

如何防止将参数格式化为PowerShell中的命令?

如何防止将参数格式化为PowerShell中的命令?,powershell,Powershell,我想使用powershell调用批处理文件,如下所示: $databaseUrl = "jdbc:sqlserver://$($databaseConfig.Server):$($databaseConfig.Port);databaseName=$($databaseConfig.Name)" ./database/liquibase/liquibase.bat --url=$databaseUrl 我的问题是=被替换为空白,只剩下--url作为第一个参数。我试着用引号把它引起来: .\d

我想使用powershell调用批处理文件,如下所示:

$databaseUrl = "jdbc:sqlserver://$($databaseConfig.Server):$($databaseConfig.Port);databaseName=$($databaseConfig.Name)"

./database/liquibase/liquibase.bat --url=$databaseUrl
我的问题是
=
被替换为空白,只剩下
--url
作为第一个参数。我试着用引号把它引起来:

.\database\liquibase\liquibase.bat "--url=$databaseUrl"
…同样的结果。我读到我可以使用backtick转义字符:

.\database\liquibase\liquibase.bat "--url`=$databaseUrl"
…但等号仍然消失。我还尝试使用
-->%
来防止任何格式化:

.\database\liquibase\liquibase.bat --% "--url=$databaseUrl"
但是变量
$databaseUrl
会被逐字解释


任何关于如何传递参数(未格式化,但变量已展开)的帮助都将不胜感激。

可能很棘手,但由于转义运算符
-->允许环境变量展开,您可以尝试以下方法:

$env:databaseUrl ="jdbc:sqlserver://$($databaseConfig.Server):$($databaseConfig.Port)"
$env:db="$($databaseConfig.Name)"
.\database\liquibase\liquibase.bat --% "--url=%databaseUrl%;databasename=%db%"

如果批处理文件在您的控制之下,那么最好的选择是允许使用
--url:
语法。这里有几个问题和注释,这些解释了问题的细节。注释太长了,但这是重要的部分:
java-cp”%cp%%java\u OPTS%liquibase.integration.commandline.Main%CMD\u LINE\u ARGS%
。当我从powershell脚本启动java命令时,参数的格式似乎正常工作。我认为这是我最好的选择。我一直在用环境变量进行测试,但它们仍然会导致问题。运行示例时,批处理文件将获得以下输入:
--url jdbc:sqlserver://TEST:1433 databaseName SomeDbName
再调整一下<代码>$env:url=“jdbc:sqlserver://server:8080" ; $env:db=“someDBName”\liquibase.bat--%“--url=%url%;databasename=%db%”
现在输入参数如下所示--url=jdbc:sqlserver://server:8080;databasename=someDBName“。这似乎很好,但当参数用于启动java程序时,它就不起作用了。可能是因为这一切都在一条线上。正如我在上面所评论的,如果我直接从powershell启动java进程,参数就可以了。我想我会去的。