“Optimal”是CompressionLevel 枚举的成员,而不是CompressionMode 枚举的成员,因此您的代码应该是:
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream($output, [IO.Compression.CompressionLevel]::Optimal)
在您的特定情况下,PowerShell 试图提供帮助并将不存在的枚举成员名称转换为 $null:
PS> $null -eq [IO.Compression.CompressionMode]::Optimal
True
PS> $null -eq [IO.Compression.CompressionMode]::NonExistentMember
True
所以你的原始代码相当于:
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream $output, $null
这给出了与您相同的异常。错误与其说是找不到带有 2 个参数的 a 构造函数重载,不如说是它找到了多个合适的重载并且无法选择使用哪个重载(参见前两个构造函数在GZipStream Constructors)。
还请注意,我必须将构造函数参数包装在圆括号中——这会改变 PowerShell 以某种方式解析要调用的构造函数的方式。我不确定确切的细节,但使用圆括号可以让它工作!
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream($output, [IO.Compression.CompressionLevel]::Optimal)
希望这会有所帮助。