gpt4 book ai didi

Powershell:将参数传递给作业

转载 作者:行者123 更新时间:2023-12-03 08:25:32 26 4
gpt4 key购买 nike

我有一个需要多个参数的脚本:

param ([string]$FOO="foo",[string]$CFG='\ps\bcpCopyCfg.ps1', [string]$CFROM="none", `
[string]$CTO="none", [switch]$HELP=$FALSE, [switch]$FULL=$FALSE, [string]$CCOL="none" `
,[string]$CDSQUERY="none", [string]$CMSSRV="none" `
,[string]$CSYBDB="none", [string]$CMSDB="none")

从命令提示符调用时,例如

powershell .\bcpCopy.ps1 -CFROM earn_n_deduct_actg -CTO fin_earn_n_deduct_actg -CCOL f_edeh_doc_id



一切正常。
但是,我需要并行启动脚本的几个(数十个)实例,并且我编写了一个包装脚本,该脚本将执行实际工作的脚本称为工作:
我准备了一个带有参数的数组(包括像“-CFG”这样的关键字),然后将它传递给 start-job:
    # Prepare script block to be released
$ARGS=("-CFG ", $CFG, "-CSYBDB ", $SYBDB, "-CMSDB ",$MSDB, "-CFROM ", $SYBTBL, "-CTO ",$MSTBL)
if ($FULL) {
$ARGS = $ARGS + " -FULL"
} else {
$ARGS = $ARGS + " -CCOL $($args[5]) "
}
"Argument array:"
$ARGS

start-job -scriptblock {powershell.exe -file '\ps\bcpCopy.ps1'} -ArgumentList $ARGS

不幸的是,被调用的脚本没有收到参数:调用者打印了数组,看起来不错:

参数数组:
-CFG
\ps\bcpCopyCfgOAH.ps1
-CSYBDB
维尼米罗
-CMSDB
综管系统_UNOV
-CFROM
Earn_n_deduct_ref
-首席技术官
fin_earn_n_deduct_ref
-满的

但是被调用脚本的输出表明,接收到的唯一参数是配置文件——其余的都是默认值。

PS C:\ps> receive-job 1391
12/17/2010 10:54:14 Starting the upload of table none; source db none;
12/17/2010 10:54:14 Target table is none; target db is none;
12/17/2010 10:54:14 Config file is \ps\bcpCopyCfg.ps1.
12/17/2010 10:54:14 Target server (MS SQL) is secap900-new
12/17/2010 10:54:14 Source database must be specified. Exiting...



你能指出我做错了什么吗?

最佳答案

我不确定你到底想做什么,但这看起来不对:

start-job  -scriptblock {
powershell.exe -file '\ps\bcpCopy.ps1'} -ArgumentList $ARGS

您正在不必要地创建一个全新的 powershell 进程。试试这个:
start-job  -scriptblock {
& 'c:\ps\bcpCopy.ps1' @args } -ArgumentList $ARGS

“@args”语法称为“splatting”。这将扩展传递的参数并确保每个元素都被视为参数。与号 (&) 是“调用”运算符。

关于Powershell:将参数传递给作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com