PowerShell: Вызвать скрипт с аргументами и пробелами в имени папки пути

У меня был скрипт, в конце которого вызывалось меню, где можно было выбрать из списка номер задачи (ввести это число с клавиатуры и нажать Enter). После выбора скрипт вызывал сам себя, но уже с выбранными параметрами. И всё работало, пока я не перенёс скрипт в папку, содержащую в своём имени пробелы.

script.ps1
## Confirmation dialog
  $answered = $false

  while(-not $answered)
  {
    $confirmation = Read-Host "Enter the number ('a' or '*' for all) or 'Q' to exit: "

    if ($confirmation -match "[aA*]")
    {
      $cmd = $MyInvocation.MyCommand.Path + " -Task ALL"
      $answered = $true
    }
    elseif ($confirmation -match "[qQ]")
    {
      Exit
    }
    elseif ($null -ne ($confirmation -as [int]))
    {
      $answered = $true
      $cmd = $MyInvocation.MyCommand.Path + " -Task $confirmation"
    }

    if ($answered)
    {
      Write-Output "`n"
      Invoke-Expression $cmd
    }
  }

В папке «C:\Program Files\PSUtils» этот скрипт уже не вызывал сам себя. Я пробовал через Start-Process -FilePath $path -NoNewWindow, это работало, но после выхода из скрипта, курсор куда-то улетал вверх, что было неудобно.

Решение

Выходом стало использование одинарных кавычек:

Invoke-Expression "& `"$PSCommandPath`" $arguments"

Полный код фрагмента теперь такой:

script.ps1
## Confirmation dialog
$answered = $false

while (-not $answered)
{
    $confirmation = Read-Host "Enter the number ('a' or '*' for all) or 'Q' to exit"
    if ($confirmation -match "[aA*]")
    {
        $answered = $true
        $arguments = " -Task ALL"
    }
    elseif ($confirmation -match '^[0-9]+$')
    {
        $answered = $true
        $arguments = " -Task $confirmation"
    }
    elseif ($confirmation -match "[qQ]")
    {
        $answered = $false
        Write-Output "key $confirmation pressed"
        Exit
    }

    if ($answered)
    {
        Write-Output "`n"
        Invoke-Expression "& `"$PSCommandPath`" $arguments"
    }
}


Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments