2016-10-19 6 views
1

ich ein seltsames Problem, wo ich vorhandenen Code haben, der 2.0 unter Windows 7x86 Powershell funktioniert aber nicht auf Windows 10x86 arbeiten.Powershell-Fehler Methodenaufruf fehlgeschlagen

Die Fehlerzustände:

Aufruf Methode ist fehlgeschlagen, weil [System.Management.Automation.PSRemotingJob] keine Methode namens 'op_Addition' enthalten. Bei C: \ Bauen \ AmazingCharts \ Working \ Gebäude \ Installer \ WiseInstaller \ Obfusated Projects \ ObfuscateFiles.ps1: 211 char: 13 + $ Jarray + = Start-Job -name ObfuscateFiles $ Script - ...
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (op_Addition: String) [], Runti
meException + FullyQualifiedErrorId: MethodNotFound

Dies besagt, dass der überladene Operator + = nicht definiert zu sein scheint, aber ich finde es sehr schwierig zu glauben, dass der + = überladene Additionsoperator in PowerShell 5.0 für Arrays veraltet wäre.

Weiterhin scheint der Code noch ausgeführt werden und eine korrekte Ausgabe zu erzeugen. In meinem Fall verwende ich ein Job-Array, um Red Gate Smart Assembly auszuführen, um Build-Dateien zu verschleiern. Im Folgenden wird Snippet ein Code

$Jarray = @() #initialize jobs array 
foreach ($file in $farray_) { 
    $params = $file,$cwd,$bldLog #parameters that are passed to script block 
    $nCount = (get-job -state "Running").Count #determines num of running jobs 
    if (-not $nCount) {$ncount=0} #initialize variable if null 
    if ($nCount -le $MAX_INSTANCES) { 
     #The line below is the one that generates the error 
     $Jarray += Start-Job -name ObfuscateFiles $ScriptBlock -ArgumentList $params 
     Start-Sleep -s 1 #gives the system time for process to start 
    } else { 
     $nCount = (get-job -state "Running").Count 
     if (-not $nCount) {$nCount=0} 
     while ($nCount -ge $MAX_INSTANCES) { 
     Start-Sleep -s 1 #gives time to recognize the job has started 
     $nCount = (get-job -state "Running").Count 
     if (-not $nCount) {$nCount=0} 
     } 
     $Jarray += Start-Job -name ObfuscateFiles $ScriptBlock -ArgumentList $params 
    } 
} 

Wenn diese es richtig ausführen alle die verschleierten Dateien und in einer angemessenen Weise erzeugt, so weiß ich es auf den MAX_INSTANCES Wert parallel baut. Ich habe sogar Code (nicht oben enthalten), der überprüft, ob die Anzahl der erwarteten verschleierten Dateien korrekt ist. Die 'Methode Aufruf fehlgeschlagen' Fehler meldet zurück zu CruiseControl.NET und mein Build schlägt fehl. Eine weitere Frustration ist, dass die Ausführung derselben .ps1-Datei in PowerGUI erfolgreich ohne Fehler abgeschlossen wird.

Ich habe sichergestellt, dass mein Array initialisiert wird. Ich habe Vorschläge ausprobiert, um anzugeben, dass das Array vom Typ [PSObject] ist, aber ich bekomme die gleichen Ergebnisse.

Hat jemand irgendwelche Ideen, was ich für diese überprüfen?

Vielen Dank.


EDIT:

  • ich dies in der Powershell-IDE getestet - Wenn von einer Eingabeaufforderung getestet läuft, bekomme ich die Fehler - Beim Ausführen des Debuggers getestet, ich habe nicht bekommen Fehler
  • Ich überprüfte den $ Jarray-Typ und es ist ein System.Object [], was ich für ein Array erwarten würde.
  • überprüfte ich die $ Jarray Wert während debug und die Arbeitsplätze geschaffen werden, aber der Fehler weiterhin besteht nach wie vor, als ob es nicht den + versteht = überladenen Additionsoperator. Meine einzige Vermutung ist, dass dies ein falscher Fehler ist, der etwas anderes maskiert.
  • Ich habe einen try/catch-Block um den Aufruf von $ Jarray hinzugefügt.Ich hatte ErrorAction Ignore versucht, aber das hat nicht funktioniert, weil der Anruf nicht weiß, was mit dem Fehler zu tun ist. Der try/catch-Block maskiert den Fehler erfolgreich. Zum Glück habe ich eine andere Methode, um festzustellen, ob mein Anruf erfolgreich ist. Unnötig zu sagen, dass dies das Problem nicht "löst", es maskiert nur das Problem, weil es momentan nicht kritisch ist.

Ich werde weiterhin diesen Bereich mit Dingen aktualisieren, die ich getestet habe.

+0

Ihr Code uns gegeben a Snippet, und es enthält zwei Zeilen, die den Fehler entsprechen, so dass wir nicht sagen können, welche von ihnen die Ausnahme verursacht (da die Zeilennummern nicht übereinstimmen). Kannst du uns sagen, ob es die Zeile im 'if' oder im' else' ist, die '' '' '' '' '' die Ausnahme ist? – briantist

+0

@briantist sollte nicht wichtig sein, wenn er etwas zwischen der ersten Zeile und der Schleife verlässt, sollte es funktionieren –

+0

briantist, danke für die Antwort. Ich hatte einen Kommentar oberhalb der Zeile hinzugefügt, der angibt, welche Zeile den Fehler erzeugt. –

Antwort

0

Nur eine Idee, aber vielleicht wollen Sie Ihre neue Maschine eine entspannte Politik für Remoting- und ermöglicht Skripte, um sicherzustellen, hat:

Set-ExecutionPolicy Unrestricted & Enable-PSRemoting