使用 Start-Process 的 ArgumentList 参数时路径中的空格引发错误

Spaces in path throwing error when using ArgumentList parameter of Start-Process

在我的个人资料中,我有以下功能:

function Start-VS {  
  param ([string]$sln, [switch]$UseNineteen )

  if ($UseNineteen) {
    $vs = "c:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7\IDE\devenv.exe"
    $vsWorkDir = "c:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7\IDE\"
  }
  else {
    $vs = "C:\Program Files\Microsoft Visual Studio22\Preview\Common7\IDE\devenv.exe"
    $vsWorkDir = "C:\Program Files\Microsoft Visual Studio22\Preview\Common7\IDE\"  
  }
  
  if (-Not ([string]::IsNullOrEmpty($sln))) {
    $TestP = (Test-Path $sln)
    if ( $TestP -eq $True) {
      $FullPath = Convert-Path $sln
      Start-Process $vs -WorkingDirectory $vsWorkDir -ArgumentList $FullPath  
    }
    else {
      Write-Output $FullPath
      Write-Output "Please use a correct pathway to a solution file" 
    }
  }
  else {
    Start-Process $vs -WorkingDirectory $vsWorkDir 
  }
}

要从 PS 提示符调用它,我正在执行以下操作:

start-vs -sln "C:\demos\m02 arrays\Example.sln"

Visual studio 打开但抱怨找不到文件 - 我知道这是因为 m02 数组 中的 space - 我该如何改变函数,以便它可以处理 spaces?

改变

Start-Process $vs -WorkingDirectory $vsWorkDir -ArgumentList $FullPath

Start-Process $vs -WorkingDirectory $vsWorkDir -ArgumentList "`"$FullPath`""

注意 $FullPath 周围的转义 "。这将包括周围的引号,作为包含空格的路径(或其他字符串)所需的参数的一部分发送