![如何将脚本添加到路径?](https://linux22.com/image/1391599/%E5%A6%82%E4%BD%95%E5%B0%86%E8%84%9A%E6%9C%AC%E6%B7%BB%E5%8A%A0%E5%88%B0%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我将常用的 powershell 脚本存储在%USERPROFILE%\Bin
。我创建了一个USER_BIN
环境变量,并通过 将其添加到用户PATH
环境变量中Control Panel > System and Security > System > Advanced system setting > Environment Variables
。
Bin
当我在 cmd 或 powershell 提示符中输入存储在ie中的脚本名称时,my-script.ps1
我收到消息my-script.ps1 : The term 'my-script.ps1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
如果我提供完整路径,即C:\Users\Ari\Bin\my-script.ps1
脚本可以正常工作。
答案1
这是 powershell 的安全功能。您只能通过相对或绝对路径调用脚本,而不能通过文件名调用。
要运行脚本,请键入脚本文件的路径和名称。即使脚本位于当前目录中,路径也是必需的,以使恶意代码更难运行脚本。文件扩展名是可选的,并且 Windows PowerShell 一如既往不区分大小写。
做出这一决定的理由如下:
恶意用户在其他 shell 中经常尝试的一种伎俩是创建一个与内置命令同名的脚本。因此,例如,如果您希望用户运行您的脚本,您可以将其命名为 Dir.ps1 并将其放入文件夹中。如果您说服用户键入 Dir 并按 Enter,您的脚本就可以运行,而不是用户期望的 Dir 命令。这种技术称为命令劫持。在 Windows PowerShell 中,您必须始终提供此类脚本的路径,从而使 Windows PowerShell 能够很好地防止命令劫持。运行 demo1 不起作用,因为没有路径,但运行 ./demo1 却可以。这是因为我现在指定了一个路径 - 当前文件夹。该命令行不太可能与内置命令混淆,因为如果您引用的是内置命令,您永远不会键入任何类型的路径。因此,要求路径有助于 Windows PowerShell 避免命令劫持和对按 Enter 时可能发生的情况的混淆。
资料来源: http://technet.microsoft.com/en-us/magazine/2007.09.powershell.aspx http://technet.microsoft.com/en-us/library/bb613481%28v=vs.85%29.aspx
答案2
Windows 在登录时初始化 CMD 和 Powershell 的路径。您需要先注销并重新登录,然后它们才会检查新目录。