我正在创建一个使用一些System.Diagnostics.Process
和System.Diagnostics.ProcessStartInfo
类的powershell脚本。
这些类完全可以这样工作:
$processInfo = new-object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = "dism.exe"
$processInfo.UseShellExecute = $false
$processInfo.RedirectStandardOutput = $true
$processInfo.Arguments = "/Apply-Image /ImageFile:C:\images\Win864_SL-IN-837.wim /ApplyDir:D:\ /Index:1"
$process = new-object System.Diagnostics.Process
$process.StartInfo = $processInfo
但是,我也想使用System.IO.StreamReader类,但当我尝试使用这样的EXACT时:
$stream = new-object System.IO.StreamReader
或者像这样
$stream = new-object System.IO.StreamReader $process.FileName
我收到错误:
New-Object : Constructor not found. Cannot find an appropriate constructor for type System.IO.StreamReader.
At C:\Users\a-mahint\Documents\Testing\inter.ps1:17 char:21
+ $stream = new-object <<<< System.IO.StreamReader
+ CategoryInfo : ObjectNotFound: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand
我一直在试图解决这个问题半小时......发生了什么事?这两个类都是.NET 4.0的一部分
答案 0 :(得分:5)
StreamReader没有no-arg构造函数,并且你没有提供任何参数。
在C#中试用。你会得到
'System.IO.StreamReader'不包含取0的构造函数 参数
相反,请尝试
$stream = new-object System.IO.StreamReader "foo.txt"
其中foo.txt
是现有文件。
请注意,它没有类型为ProcessStartInfo
的参数的构造函数,这就是传递$process.StartInfo
不起作用的原因。相反,请尝试传递$processInfo.FileName
。