2012-07-30 75 views
6

我已经创建了下面的Powershell脚本,我希望用它来将文件复制到网络共享。Powershell无法绑定参数ForegroundColor

function Copy-Deploy 
{ 
param(
    [Parameter(Position=0,Mandatory=$true,HelpMessage="Path to scripts")] 
    [Alias("pth")] 
    [string]$ScriptPath, 

    [Parameter(Position=1,Mandatory=$true,HelpMessage="Deployment script filename")] 
    [Alias("dep")] 
    [string]$PowershellDeploymentScript, 

    [Parameter(Position=2,Mandatory=$true,HelpMessage="MSI filename")] 
    [Alias("m")] 
    [string]$MSI, 

    [Parameter(Position=3,Mandatory=$true,HelpMessage="Filename of the MSBuild script (.btdfproj)")] 
    [Alias("msb")] 
    [string]$MSBuildScript, 

    [Parameter(Position=4,HelpMessage="UNC path to target server folder")] 
    [Alias("server")] 
    [string]$TargetServerPath 

) 

$ErrorActionPreference="Stop" 

#Step 1 : copy the MSI, .btdfproj script and control powershell script to the remote server 
Write-Host " Going to enter the mis script block" 
$misScript = 
{ 
    Write-Host " Path+Filename = {0}({1})" -f $ScriptPath, $PowershellDeploymentScript 
    Write-Host " Going to copy files" 
    Write-Host " ScriptPath = $ScriptPath" 
    Write-Host " PowershellDeploymentScript = $PowershellDeploymentScript" 
    Write-Host " MSI = $MSI" 
    Write-Host " MSBuildScript = $MSBuildScript" 
    Write-Host " TargetServerPath = $TargetServerPath" 


    Copy-Item -Path "$ScriptPath" + "$PowershellDeploymentScript" -Destination "$TargetServerPath" 
    Copy-Item -Path "$ScriptPath" + "$MSI" -Destination "$TargetServerPath" 
    Copy-Item -Path "$ScriptPath" + "$MSBuildScript" -Destination "$TargetServerPath" 
} 
Invoke-Command -scriptblock $misScript 

#Step2 : Execute the powershell script ExecuteBizTalkAppMSI.ps1 remotely on the target server 
#using syntax... invoke-command -computer $MachineName -command { $TargetServerPath + ExecuteBizTalkAppMSI.ps1 }" 

} 

我从运行PowerShell ISE中该脚本使用以下行:

Copy-Deploy "C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment\" "ExecuteBizTalkAppMSI.ps1" "bin\debug\x.Int.MIS-3.0.0.msi" "x.Int.MIS.Deployment.btdfproj" "\\d-vasbiz01\BizTalkDeployment" 

然后我得到以下错误:

Cannot bind parameter 'ForegroundColor'. Cannot convert value "C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment\,ExecuteBizTalkAppMSI.ps1" to type "System.ConsoleColor" due to invalid enumeration values. Specify one of the following enumeration values and try again. The possible enumeration values are "Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White".At C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment\CopyDeployScriptThenExecute.ps1:79 char:16 

谁能告诉我哪里出了错?

回答

15

线:

Write-Host " Path+Filename = {0}({1})" -f $ScriptPath, $PowershellDeploymentScript 

就是问题所在。

写这样的:

Write-Host (" Path+Filename = {0}({1})" -f $ScriptPath, $PowershellDeploymentScript) 

-f正在采取如超过字符串格式运算符的-ForegroundColor参数。

+0

这是伟大的感谢manojlds – 2012-07-30 14:52:14

1

将消息包装在parens中。您还可以使用变量扩展和嵌入变量不使用-format操作(就像你在其他写主机呼叫一样):

Write-Host " Path+Filename = $ScriptPath($PowershellDeploymentScript)" 
+0

由于吉文。我从来没有使用+来连接字符串的运气很多,但也许我在等号的右侧使用它们时遇到了这个问题 – 2012-07-30 14:54:36