提问人:rvpals 提问时间:9/14/2023 最后编辑:mklement0rvpals 更新时间:9/14/2023 访问量:51
PowerShell:使用调用方的输入(参数)执行命令行
PowerShell: execute a command line with input (arguments) from the caller
问:
我正在尝试编写一个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赞
mklement0
9/14/2023
#1
按如下方式定义函数:
function ExecuteSQLScript($sqlfile, $dbconnection) {
@() | sqlplus $dbconnection "@$sqlfile"
}
@() | ...
是 PowerShell 的等效项(PowerShell 没有运算符); 是在管道中枚举的空数组,因此不会向外部程序的 stdin 流发送任何内容。cmd.exe
<NUL
<
@()
&
因为只有引用和/或包含变量引用的命令名称才需要调用;虽然您可以使用 ,但就足够了。& sqlplus ...
sqlplus ...
本身充当命令参数的变量引用(如上所述)永远不需要在 PowerShell 中引用(除非您想预先显式强制字符串化,例如
$dbonnection
"$dbconnection"
)@
是 PowerShell 中的元字符,因此它必须转义或位于带引号的字符串内;在这里,可展开(双引号)字符串 (“...”
) 既用于逐字使用,也用于使用字符串插值(扩展)来附加 的值。@
$sqlfile
按如下方式调用它,例如:
# Note: *Whitespace* between arguments, no (...)
ExecuteSQLScript 'c:\test.sql 'testing/password@db'
- 也就是说,PowerShell 函数、cmdlet、脚本和外部程序必须像 shell 命令一样调用,而不是像 C# 方法那样调用。
如果用于分隔参数,则将构造一个命令将其视为单个参数的数组。
有关详细信息,请参阅此答案和此答案。foo arg1 arg2
foo('arg1', 'arg2')
,
评论