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