无法从powershell调用dotnet方法

时间:2016-03-24 05:29:21

标签: powershell powershell-v5.0

我试图调用System.Diagnostics.Process的Start方法。我在互联网上看到了很多其他的例子,但是当我运行我的代码时,却完全相同:

$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参数重载。事实上,如果我从括号中删除括号中的括号,它的无限智慧告诉我零参数重载

OverloadDefinitions
-------------------
bool Start()

Powershell正在哄我!最初我创建了一个ProcessStartInfo实例并尝试将其传递给静态Process.Start方法,我得到了同样的错误(除了它说with "1" argument(s)

更新

这是我的更新代码。

$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()
}

1 个答案:

答案 0 :(得分:1)

有些东西告诉我你的参数不正确,并且$configPath中有空格。但这只是预感......如果您在问题中提供$configPath$name的值,那会更好。

使用时会发生什么:

$process.StartInfo.Arguments = "/config:`"$configPath\${name}ApplicationHost.config`" /site:`"$name`""