在包含空格的路径上调用exe时,powershell出现问题。
PS C:\Windows Services> invoke-expression "C:\Windows Services\MyService.exe"
术语“ C:\ Windows”不被视为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。
它似乎在“ Windows”和“服务”之间的空间上分裂了。任何想法如何解决这个问题?
Answers:
您可以通过在空格前使用单引号和反引号来转义该空格:
$path = 'C:\Windows Services\MyService.exe'
$path -replace ' ', '` '
invoke-expression $path
-replace
对包含路径的变量执行操作,并将''替换为'`'
"&'C:\Windows Services\MyService.exe'" | Invoke-Expression
通过https://www.vistax64.com/powershell/52905-invoke-expression-exe-has-spaces-its-path.html
可以使用.
点运算符。
. "C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"
或Start-Process
命令
Start-Process -PSPath "C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"
或使用ProcessStartInfo
和Process
$ProcessInfo = New-Object -TypeName System.Diagnostics.ProcessStartInfo
$ProcessInfo.FileName = 'C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe'
if($Admin){ $ProcessInfo.Verb = 'runas' }
$ProcessInfo.UseShellExecute = $false
$CommandParameters = '-noexit -noprofile -command Set-Location -LiteralPath c:\; $host.ui.RawUI.WindowTitle = ''[{0}] PS''; Set-PSReadlineOption -HistorySaveStyle SaveNothing;' -f $Cred.UserName
$ProcessInfo.Arguments = $CommandParameters
$ProcessInfo.Domain = ($Cred.UserName -split '\\')[0]
$ProcessInfo.UserName = ($Cred.UserName -split '\\')[1]
$ProcessInfo.Password = $Cred.Password
$ProcessObject = New-Object -TypeName System.Diagnostics.Process
$ProcessObject.StartInfo = $ProcessInfo
$ProcessObject.Start() | Out-Null
&
调用运算符,可以调用其名称或路径存储在带引号的字符串中和/或通过变量引用的命令,如在接受的答案中一样。Invoke-Expression
不仅是错误的工具,以在这种特殊情况下使用,它应该一般被避免。