为什么我收到“InvalidOperation:您无法在空值表达式上调用方法。”仅当使用“-Parallel”时?

问题描述 投票:0回答:1

我使用的是Powershell版本7.4.6

我不明白这种行为。

我有一个正则表达式

$r = New-Object System.Text.RegularExpressions.Regex "a+"

当我运行它时

( 'a', 'aa', 'aaa', 'b' ) | ForEach-Object { $r.isMatch( $_ ) }

我得到了预期的结果:

True
True
True
False 

但是如果我尝试使用

-Parallel
运行它,例如:

    ( 'a', 'aa', 'aaa', 'b' ) | ForEach-Object -Parallel { $r.isMatch( $_ ) }

我惊讶地得到:

InvalidOperation: You cannot call a method on a null-valued expression.
InvalidOperation: You cannot call a method on a null-valued expression.
InvalidOperation: You cannot call a method on a null-valued expression.
InvalidOperation: You cannot call a method on a null-valued expression.

为什么

powershell null
1个回答
0
投票

您需要使用

using:
作用域修饰符
Regex
实例传入并行作用域,由于解析错误,还需要将表达式括在括号中:

$r = [regex]::new("a+")
'a', 'aa', 'aaa', 'b' | ForEach-Object -Parallel { ($using:r).IsMatch($_) }
© www.soinside.com 2019 - 2024. All rights reserved.