如何将脚本添加到路径?

如何将脚本添加到路径?

我将常用的 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 的路径。您需要先注销并重新登录,然后它们才会检查新目录。

相关内容