多线程时如何使用FileInfo对象

时间:2017-10-02 20:00:21

标签: multithreading powershell

在运行多个线程时无法使用反序列化的文件信息对象

Main获取文件信息并启动新线程。线程将加载我的模块文件和"使用"我在主要文件中获得的文件

$file = Get-FileInfo -path "test.zip"

$Scriptblock = {

    Import-Module ".\path\to\foo\module.psm1"
    Foo -File $using:file
    }

Start-Job -ScriptBlock $ScriptBlock 

在我的帖子中,我无法调用$ file.Basename,因为我的对象在传递给我的线程时被去除了deseralized。 Deseralized.IO.fileinfo类的功能少于原始的FileInfo类

我希望能够在我的主题中使用与$ file相同的功能,就像在主

中一样

我有办法做到这一点吗?也许通过重新定义我的对象..?

1 个答案:

答案 0 :(得分:1)

我认为通过将文件作为参数传递到scriptblock然后在作业中调用Get-FileInfo来提高服务质量会更好:

$MyPath = "test.zip"
$Scriptblock = {

    Import-Module ".\path\to\foo\module.psm1"
    Foo -File $using:file
    $file = Get-FileInfo -path $Using:MyPath
}

Start-Job -ScriptBlock $ScriptBlock 

替代:

$MyPath = "test.zip"
$Scriptblock = {
    param([String]$Path)

    Import-Module ".\path\to\foo\module.psm1"
    Foo -File $using:file
    $file = Get-FileInfo -path $Path
}

Start-Job -ScriptBlock $ScriptBlock -ArgumentList $MyPath