我是我的PS脚本,我希望能够通过执行以下操作在另一个PS示例中运行另一个脚本:
$filepath = Resolve-Path "destruct.ps1"
start-process powershell.exe "$filepath"
destruct.ps1
与此脚本位于同一文件夹中。
但是,当在包含空格("C:\My Scripts\"
)的位置运行此脚本时,我会得到以下错误:
术语“C:\My”未被识别为cmdlet、函数、可操作程序或脚本文件。请验证该术语,然后重试。
我知道通过使用'&'
和Invoke-Expression方法可以解决这个问题,但是我如何使用start-process方法来解决这个问题呢?
6条答案
按热度按时间wfveoks01#
试试这个:
评论后编辑:
附注:
$filepath
是[pathinfo]
类型,而不是[string]
类型。zf2sa74q2#
您可以添加转义双引号,以便传递带引号的参数:
aemubtdh3#
我在这里回答一个一般的情况。
如果您需要从Powerhsell导航到一个文件夹,例如
C:\Program Files
,则以下命令将不起作用,因为它在路径之间有白色。cd C:\Program Files
而是像下面这样用双引号嵌入路径。
cd "C:\Program Files"
igetnqfo4#
文件名可能包含空格,因此在完整路径中保留空格:
记事本++执行命令:
“C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe”“& "$(FULL_CURRENT_PATH)"”
命令提示符中的相同:
“C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe”“& \“C:\a_work\Systems\name with spaces.ps1"”
vm0i2vca5#
为了防止[string]$shipno(即路径和文件名)包含空格,下面的代码允许它成功地传递给-FilePath:
9ceoxa926#
如果您在使用**PowerShell 7(pwsh)**寻找解决方案时遇到此问题:
1.将参数列表作为包含所有参数的单个字符串写入
1.用双引号将脚本名称括起来
1.用单引号和parantheses括起参数字符串
基本示例:
带有附加交换机的示例:
以管理员身份运行脚本的示例:
这是针对问题https://github.com/PowerShell/PowerShell/issues/5576的解决方案,该问题已超过5年未解决。