2012-07-30 23 views
6

He creado el siguiente script de Powershell que espero usar para copiar archivos en un recurso compartido de red.Powershell no puede vincular el parámetro 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 }" 

} 

que ejecutar este script desde el PowerShell ISE con la siguiente línea:

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" 

luego me sale el siguiente error:

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 

Podría alguien por favor me dicen que hice mal ?

Respuesta

15

La línea:

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

es el problema.

escritura de esta manera:

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

El -f se estaba tomando como parámetro -ForegroundColor que el operador de formato de cadena.

+0

Eso está muy bien gracias manojlds –

1

Envuelva el mensaje en parens. También puede utilizar la expansión de variables e integrar las variables sin utilizar el operador -format (como lo hizo en otras llamadas Write-Host):

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

Gracias Shay. Nunca tuve mucha suerte con el uso de un + para concatenar una cadena, pero tal vez estaba obteniendo ese problema al usarlos en el lado derecho del signo igual –

Cuestiones relacionadas