1

次のコード スニペットを使用してコマンドを実行しようとしています。

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 の基本的な概念があると思います。どこで間違ったのですか?

4

2 に答える 2

1

次のようにしてみてくださいInvoke-Expression

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

文字列全体が最初に評価され、結果が通常のコマンドのようにPowerShellに渡されます

于 2012-06-08T20:12:43.350 に答える
1

変数を引数としてコマンドに渡す場合、それらを引用符で囲む必要はありません。そうは言っても、コマンドに不正なセミコロンがあるようです。セミコロンは PowerShell では省略可能ですが、存在する場合はコマンドの区切り記号として使用されます。この場合、セミコロンを含む引数を引用するか、その引数の変数を作成する必要があります。

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

を使用diutilしたことがないため、コマンドの引数や構文がわかりません。

于 2012-06-09T23:09:35.637 に答える