无法从PowerShell调用dotnet方法
问题描述:
我正在尝试调用System.Diagnostics.Process的Start方法。我在网上看到很多例子这样做完全一样的但是当我跑我的代码:无法从PowerShell调用dotnet方法
$process = new-object System.Diagnostics.Process
$config.variables.properties | foreach {
$process.StartInfo.EnvironmentVariables.Set_Item($_.name, $_.value)
}
$process.StartInfo.UseShellExecute = false;
$process.StartInfo.FileName = "C:\Program Files\IIS Express\iisexpress.exe"
$process.StartInfo.Arguments = "/config:$configPath\${name}ApplicationHost.config \site:$name"
$process.Start()
我得到这个毫无意义的错误:
Exception calling "Start" with "0" argument(s): "The parameter is incorrect"
At C:\Users\critc\Source\run-iisexpress.ps1:67 char:1
+ $started = $process.Start() | Out-Null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : Win32Exception
这个方法有一个0参数超载。 INFACT如果我从电话的PowerShell下降括号在它的无穷的智慧告诉我,那里有一个零参数超载
OverloadDefinitions
-------------------
bool Start()
PowerShell是曳我!本来我是创建一个实例的ProcessStartInfo,并试图将它传递给静态的Process.Start方法和我得到了同样的错误(除非它说with "1" argument(s)
)
UPDATE
继承人我更新的代码工作的。
$process = new-object System.Diagnostics.Process
Get-Member -inputObject $config.variables -memberType Properties | foreach {
$value = $config.variables | select -exp $_.name
$process.StartInfo.EnvironmentVariables.Set_Item($_.name, $value)
}
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.FileName = "C:\Program Files\IIS Express\iisexpress.exe"
$process.StartInfo.Arguments = "/config:`"$configPath\${name}ApplicationHost.config`" /site:$name"
$started = $process.Start()
if ($started) {
$process.WaitForExit()
}
答
东西告诉我你的参数是不正确的,你有的空间。但这只是一个预感......如果你在你的问题中提供了和$name
的值,那会更好。
会发生什么事,如果你使用:
$process.StartInfo.Arguments = "/config:`"$configPath\${name}ApplicationHost.config`" /site:`"$name`""
$ process.StartInfo.UseShellExecute =假应该是$ process.StartInfo.UseShellExecute = $假的,不应该吗? –
@DavidBrabant是的,你是正确的这似乎并不是我的灾难的原因 – Sam
这里的一切都作为一个要点,如果任何人有兴趣 - https://gist.github.com/worldspawn/ed3e16accbdefaa8ee35 – Sam