2016-07-20 3 views
0

dieses Szenario vor:-Workflow wirft Fehler ‚GetVersionInfo‘, wenn die Datei nicht mehr vorhanden ist

$Error.Clear() 

Workflow Test-Workflow { 
    Param (
     [Parameter(Mandatory)] 
     [Array]$File 
    ) 
    'Workflow executed' 
} 

$File = New-Item $env:TEMP\test.txt -ItemType File -Force 

$Object = [PSCustomObject]@{ 
    File = $File 
    Test = 'Stuff' 
} 

Test-Workflow -File $Object 
$Error 

Alle ausgeführt Ordnung und es sind keine Fehler. Nun, wenn die Datei, um den Workflow entfernt wird nicht ausgeführt mehr ohne Fehler:

$Error.Clear() 
Remove-Item $File 
Test-Workflow -File $Object 
$Error 

Der folgende Fehler wird zweimal gemeldet:

Exception calling "GetVersionInfo" with "1" argument(s): "C:\Users\bob\AppData\Local\Temp\3\test.txt" 
At line:1 char:1 
+ [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : FileNotFoundExceptio 

Ist das ein normales Verhalten? Wie kann dies vermieden werden? Weil wir die Datei archivieren möchten, bevor wir den Workflow ausführen. Oder fehlt mir hier etwas Super-Offensichtliches bezüglich Workflow-Details?

Vielen Dank für Ihre Hilfe.

Antwort

1

Was ich denke ist, dass einen Verweis auf die Datei speichert, die Sie erstellt haben. Sie haben dann die Datei gelöscht, auf die verwiesen wird. Aus diesem Grund haben Sie ein FileNotFoundException

#Delete your file 
Remove-Item $File 
#Try to pass reference to deleted file to Workflow, when it looks it finds no file and fails 
Test-Workflow -File $Object 

Aufgrund dieses Versagen normales Verhalten ist. Sie können vor der Archivierung eine temporäre Kopie der Datei erstellen und die temporäre Datei löschen, nachdem Sie daran gearbeitet haben. Ansonsten denke ich, dass Sie den Inhalt der Datei in den Speicher laden müssen und nur das Objekt im Speicher bearbeiten und sicherstellen, dass nichts nach Ihrer gelöschten Datei sucht.

+0

Wenn ich das gleiche mit einer "Advanced-Funktion" in PowerShell mache, gibt es keinen Fehler, aber mit einem 'Workflow' gibt es. Wirklich seltsam, dass der 'Workflow' die Existenz der Datei überprüfen will, während diese überhaupt nicht benötigt wird. Danke für die Hilfe trotzdem. – DarkLite1

+0

Ich habe es ziemlich einfach gemacht, indem ich die Eigenschaften ausgewählt habe, die ich im Voraus benötige, wie diese Datei = $ F | Select-Object Name, BaseName, FullName' – DarkLite1

+1

Ich finde Powershell ein wenig obskurer, wenn es um Aktionen hinter den Kulissen geht. Der folgende Link beschreibt die Einschränkungen von Variablen in Workflows unter anderem. Ich denke, dass das Verlieren des Dateiobjekts im Speicher und die Tatsache, dass die tatsächliche Datei noch vorhanden sein muss, etwas damit zu tun hat, dass Workflows nicht Powershell sind, sondern Code, der von Powershell in etwas anderes übersetzt wird. https://technet.microsoft.com/en-us/magazine/dn151046.aspx –

Verwandte Themen