Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 尝试使用$variables参数化命令时出错_Powershell_Powershell 2.0_Powershell Ise - Fatal编程技术网

Powershell 尝试使用$variables参数化命令时出错

Powershell 尝试使用$variables参数化命令时出错,powershell,powershell-2.0,powershell-ise,Powershell,Powershell 2.0,Powershell Ise,我正在尝试使用以下代码段执行命令: foreach($package in (Get-Childitem *.dtsx | select-object -expand Name)) { DTUTIL /COPY SQL;"\$package" /DESTSERVER "$global:SSISServer" /FILE "$package" /Q } 但是,这样做会导致以下错误消息: You must provide a value expression on the right-ha

我正在尝试使用以下代码段执行命令:

foreach($package in (Get-Childitem *.dtsx | select-object -expand Name))
{
    DTUTIL /COPY SQL;"\$package" /DESTSERVER "$global:SSISServer" /FILE "$package" /Q
}
但是,这样做会导致以下错误消息:

You must provide a value expression on the right-hand side of the '/' operator.
At C:\Projects\RiskOptix\Code\Deployment\BuildAll.ps1:267 char:39
+         DTUTIL /COPY SQL;"\$package" / <<<< DESTSERVER "$global:SSISServer" /FILE "$package" /Q
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedValueExpression
但现在这给了我

Microsoft (R) SQL Server SSIS Package Utilities
Version 10.50.1600.1 for 32-bit
Copyright (C) Microsoft Corporation 2010. All rights reserved.

At least one of the DTS, SQL, or File options must be specified.

但至少命令运行了,但它似乎没有收到我发送给它的任何参数……我猜这里有一个基本的PowerShell概念,我忽略了或者没有理解。我哪里出错了?

试试
调用表达式
比如:

Invoke-Expression "DTUTIL /COPY SQL;`"\$package`" /DESTSERVER `"$global:SSISServer`" /FILE `"$package`" /Q"

首先计算整个字符串,然后将结果传递给powershell,就像普通命令一样

将变量作为参数传递给命令时,不需要引用它们。也就是说,看起来你的命令中有一个流氓分号。分号在PowerShell中是可选的,但如果存在,则用作命令分隔符。在这种情况下,您需要引用带有分号的参数,或者为该参数创建一个变量:

Get-Childitem *.dtsx | 
    Select-Object -expand Name |
    ForEach-Object { DTUTIL /COPY "SQL;\$package" /DESTSERVER $global:SSISServer /FILE $package /Q

我从未使用过
diutil
,因此不知道命令参数或语法。

它仍然给我错误调用表达式:必须在“/”运算符的右侧提供值表达式。try:echo“DTUTIL/COPY SQL;
”\$package
“/DESTSERVER
”$global:ssiserver
“/FILE
”$package
“/Q”并按照win Batch中运行的方式设计输出实际上这给了我一个想法-我使用了echo“/COPY SQL;”“\$package”“/DESTSERVER”“$global:SSISServer”“/FILE$package/Q”| DTUTIL.。令人惊讶的是,它工作了。以这种方式使用它,vs&,vs Invoke方法,vs每个参数的多个字符串,例如DTUTIL“/COPY SQL;”“\$Package”“”/DESTSERVRER“$Server”“”/FILE$Package”“/Q,有什么区别?这很有效-我想我的问题是不理解参数是如何从PowerShell传递到命令的谢谢,这让我发疯了
Get-Childitem *.dtsx | 
    Select-Object -expand Name |
    ForEach-Object { DTUTIL /COPY "SQL;\$package" /DESTSERVER $global:SSISServer /FILE $package /Q