当文件不再存在时,工作流抛出错误 'GetVersionInfo'

Workflow throws error 'GetVersionInfo' when file is no longer present

考虑这种情况:

$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

一切都执行得很好,没有错误。现在,一旦文件被删除,工作流将不再正确执行:

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

两次报如下错误:

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

这是正常现象吗?如何避免这种情况?因为我们想在执行工作流之前将文件存档。还是我在这里遗漏了一些关于工作流细节的非常明显的东西?

感谢您的帮助。

我认为正在发生的事情是 $object 存储了对您创建的文件的引用。然后您删除了引用的文件。这就是为什么你有 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

因为这种失败是正常行为。您可以做的是在归档之前创建文件的临时副本,并在处理后删除临时文件。否则我认为你必须将文件的内容加载到内存中并且只对内存中的对象进行操作并确保没有任何东西查找你删除的文件。