所以我尝试了一些不同的方法从命令行运行PowerShell脚本,每一个都返回一个错误。
这是这条路:
C:\Users\test\Documents\test\line space\PS Script\test.ps1
我试过这些:
powershell -File '"C:\Users\test\Documents\test\line space\PS Script\test.ps1"'
powershell "& ""C:\Users\test\Documents\test\line space\PS Script\test.ps1"""
Powershell "& 'C:\Users\test\Documents\test\line space\PS Script\test.ps1'"
Powershell -File 'C:\Users\test\Documents\test\line space\PS Script\test.ps1'"
我收到所有这些错误:
&安培; :术语“C:\ Users \ test \ Documents \ test \ line space \ PS Script \”不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。
处理-File''C:\ Users \ test \ Documents \ test \ line space \ PS Script \''失败:不支持给定路径的格式。为-File参数指定有效路径。
非常感谢任何帮助!
答案 0 :(得分:12)
-File
参数如果要从命令行运行powershell.exe -File
,则必须始终在doubleqoutes("
)中设置带空格的路径。单引号('
)仅由powershell识别。但是,当命令行调用powershell.exe(因此处理文件参数)时,您必须使用"
。
powershell.exe -File "C:\Users\test\Documents\Test Space\test.ps1" -ExecutionPolicy Bypass
-Command
参数如果您使用-Command
参数而不是-File
,则-Command
内容由PowerShell处理,因此您可以 - 并且在这种情况下必须 - 使用{{1} } '
。
"
双引号由命令行处理,powershell.exe -Command "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass
是PowerShell实际处理的命令。
解决方案1显然更简单。
请注意,& 'C:\Users\test\Documents\Test Space\test.ps1'
也是使用的默认参数,如果您未指定任何参数。
-Command
这也可行。
powershell.exe "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass
参数您可以将命令编码为Base64。这解决了许多引用"问题,有时(但不是在你的情况下)是唯一可能的方式。
首先,您必须创建编码命令
-EncodedCommand
然后您可以使用$Command = "& 'C:\Users\test\Documents\Test Space\test.ps1'"
[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Command))
这样的参数
-EncodedCommand
答案 1 :(得分:3)
试试这个:
PS C:\> & "C:\Users\test\Documents\test\line space\PS Script\test"
答案 2 :(得分:2)
在您的示例中,您无缘无故地混合引号和双引号。
IF EXIST "C:\Users\test\Documents\test\line space\PS Script\test.ps1" (
powershell -ExecutionPolicy Unrestricted -File "C:\Users\test\Documents\test\line space\PS Script\test.ps1"
)
答案 3 :(得分:0)
如果您使用参数,则可以按照以下步骤操作
powershell.exe -command "& {&'C:\A B C\foo.ps1' param1 param2}"
在此感谢Hesham A. Amin:-)
答案 4 :(得分:0)
要添加到本主题:
我需要用空格传递参数。
我正在将文件拖放到批处理文件上,并且该文件在服务器上已关闭,路径和/或文件名中带有空格。经过测试以上答案,我得到了这个工作。请注意,在启动powershell之前,我将切换到工作目录。
批处理文件:
pushd O:\Data\QuickList
start powershell -noexit -Command ".\QuickList.ps1 -datafile '%1'"
popd