我试着写一个powershell脚本,当它执行时,它需要2个变量并将其传递给一个函数。该函数使用输入变量运行命令行。
验证码:
function ExecuteSQLScript($sqlfile, $dbconnection) {
& 'sqlplus ' $dbconnection' @'$sqlfile ' <nul'
}
main block:
ExecuteSQLScript('c:\test.sql', 'testing/password@db')
*basically I want the command line to execute:
SQLPLUS testing/password@db @c:\test.sql < nul*
运行命令行调用SQLPLUS在powershell中执行sql文件。
1条答案
按热度按时间p1tboqfb1#
@() | ...
是PowerShell的cmd.exe
的<NUL
的等价物(PowerShell没有<
运算符);@()
是一个空数组,它在管道中被枚举,因此不向外部程序的stdin流发送任何东西。&
只需要用于 * 带引号 * 和/或包含 * 变量引用 * 的命令名;虽然您可以使用& sqlplus ...
,但只需sqlplus ...
即可。$dbonnection
)在PowerShell中永远不需要引号(除非你想预先显式强制字符串化,例如,"$dbconnection"
)@
在PowerShell中是一个 * 元字符 *,所以它必须被转义或在一个带引号的字符串中;这里,可扩展(双引号)字符串("..."
)既用于逐字使用@
,又用于使用字符串插值(扩展)来附加$sqlfile
的值。例如,如下所示:
foo arg1 arg2
- * 而不是像C#方法一样调用 *-foo('arg1', 'arg2')
。如果使用
,
来分隔参数,则将构造一个 * 数组 *,命令将其视为 * 单个参数 *。有关详细信息,请参阅this answer和this answer。