Как мне справиться с пробелами в пути $ PSScriptRoot в powershell

Я пытаюсь написать сценарий powershell, который установит Java с помощью файла Installcfg.cfg. Я хотел бы, чтобы он мог работать независимо от того, где выполняется скрипт. Он отлично работает, когда ни в одном из путей к файлам нет пробелов, однако, когда я запускаю его из другого места, я получаю следующую ошибку:

Есть ошибки в следующих ключах: "INSTALLCFG='C:\Program";"Files";"(x86\DesktopCentral_Agent\swrepository\1\swuploades\Java";"8";"Update";"25\InstallCFG. cfg'";.

Powershell, похоже, не передает пути к файлам, как я хочу.

Сценарий выглядит следующим образом:

#Determine the Architecture
$Arch = (Get-WmiObject Win32_OperatingSystem).OSArchitecture

#Make sure no browsers are running
kill -processname iexplore, chrome, firefox

#Install based on Architecture
if ($Arch -eq "64-bit")
    {
    Start-Process jre-8u25-windows-x64.exe -wait -args "INSTALLCFG=$PSScriptRoot\InstallCFG.cfg /L c:\temp\java64.txt"
    Start-Process jre-8u25-windows-i586.exe -wait -args "INSTALLCFG=$PSScriptRoot\InstallCFG.cfg /L c:\temp\java32.txt"
    }

else 
    {
    Start-Process jre-8u25-windows-i586.exe -args "INSTALLCFG=$PSScriptRoot\InstallCFG.cfg /L c:\temp\java32.txt"
    }

Я пробовал различные способы включения кавычек в аргументы и даже создания аргументов как переменной. Я не хочу жестко задавать местоположение, потому что хочу, чтобы файл запускался откуда угодно.

В основном я пытаюсь запустить следующую команду из командного файла в powershell:

"%~dp0jre-8u25-windows-x64.exe" INSTALLCFG="%~dp0InstallCFG.cfg" /L c:\temp\log.txt

Что мне не хватает?


person user188552    schedule 14.04.2015    source источник


Ответы (1)


Экранирующий символ — обратная галочка. Вы должны быть в состоянии написать что-то вроде

"INSTALLCFG=`"$PSScriptRoot\InstallCFG.cfg`" /L c:\temp\java64.txt"

для аргумента аргументов.

person Mike Zboray    schedule 14.04.2015