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

时间:2012-06-08 20:02:46

标签: powershell powershell-v2.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-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

我也试过

& DTUTIL "/COPY SQL;'\" + [System.IO.Path]::GetFileNameWithoutExtension($package) + "' /DESTSERVER '$global:SSISServer' /FILE $package"

但现在这给了我

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的一个基本概念,我忽视或未能掌握这里。我哪里出错?

2 个答案:

答案 0 :(得分:1)

尝试Invoke-Expression喜欢:

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

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

答案 1 :(得分:1)

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

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

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