1

I have a PowerShell script in a folder with square braces, for example:

When I try and run my script from the command line using:

C:\Temp\[test]>Powershell.exe .\MyScript.ps1

I get the following output:

enter image description here

If I put the same script in a folder without square braces and run:

C:\Temp\(test)>Powershell.exe .\MyScript.ps1

It works and I get the following output:

enter image description here

The script is part of an automation project and must be in a folder with square braces. Any help would be greatly appreciated.

4

1 回答 1

3

问题:将本地路径传递给在文件夹名称中包含方括号的 powershell.exe 意味着 powershell 找不到传递给它的脚本文件。

选项 1:使用 powershell -File .\MyScript.ps1
选项 2:使用 powershell %CD%\MyScript.ps1

我不清楚为什么 powershell 找不到您的路径,但 -File 命令行参数似乎可以解决它。与使用 %CD% 批处理文件属性而不是 '.' 一样。

如果我创建一个包含单行的文件“HelloWorld.ps1”:

Write-Output "Hello World"

在一个文件夹中

c:\work\joel\scream

并运行命令:

C:\work\joel\scream>powershell .\HelloWorld.ps1

然后我得到预期的输出(Hello World)。

如果我将文件夹重命名为 [scream],它会失败。

cd ..
ren scream [scream]

方括号是范围运算符。

C:\work\joel\[scream]>powershell .\HelloWorld.ps1

现在产生:

.\helloworld.ps1 :术语“.\helloworld.ps1”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。

但是运行:

C:\work\joel\[scream]>powershell -File .\HelloWorld.ps1   

给出预期的输出(Hello World)。

powershell /?
<snip/>
-File
    Runs the specified script in the local scope ("dot-sourced"), so that the
    functions and variables that the script creates are available in the
    current session. Enter the script file path and any parameters.
    File must be the last parameter in the command, because all characters
    typed after the File parameter name are interpreted
    as the script file path followed by the script parameters.

我不清楚 powershell 或命令提示符/批处理脚本是否误解了路径,但我可以说,虽然:

C:\work\joel\[scream]>powershell .\HelloWorld.ps1

不起作用:

C:\work\joel\[scream]>powershell %CD%\helloworld.ps1 

确实有效。所以它似乎与'.'的扩展有关。进入当前路径。

于 2013-08-09T06:48:09.043 回答