Powershell:为什么 运行 一个脚本这么复杂?

Powershell: why is it so complicated to run a script?

我想实现一些类似别名的命令,它可以让我通过少输入来浏览很长的目录路径。

中,我了解到无法为“cd c:\some\dir”等命令创建别名,但可以创建一个函数,将其保存到脚本中,然后 运行它。

所以我创建了一个脚本,将其保存在目录 C:\ps_scripts 中,确保该目录在 PATH 中列出,然后从 C:\ps_scripts 打开 PS 和试图发出命令 .\script.ps1 但什么也没发生——没有错误,没有输出,没有导航到所需的目录路径。 script.ps1 包含以下代码:

function fp { set-location "C:\Users\user\puppet\modules\fp\files\configs" }

然后我搜索了解决方案 here 并尝试按照接受的答案中的建议通过附加 powershell -noexit "& 来 运行 脚本,但出现错误 term '$' is not recognized

并且我的执行策略设置为 RemoteSigned。

可能是什么问题?

您将函数定义放入脚本中。你现在必须 call/execute 这个函数在某处。您的函数 fp 在被调用时与 cd C:\Users\user\puppet\modules\fp\files\configs 执行相同的操作。

如果您希望您的函数在命令提示符下可用,您必须在其名称前加上 global: 前缀,如下所述:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-7#function-scope

您应该使用适当的 PowerShell profiles 来处理这些事情,例如函数、命令和设置。

您可以获得适用范围的配置文件路径 - 用户(当前或所有)和主机范围(当前主机或所有主机)。

例如要获取所有主机(Windows PowerShell 控制台、ISE)的当前用户的配置文件路径,您可以在 PowerShell -

中键入
Write-Output $PROFILE.CurrentUserAllHosts

这将告诉您将用于范围的配置文件的路径。

根据命令的输出创建一个具有相同路径和名称的文件,并将您的函数放入该文件中。这将由当前用户为任何 PowerShell 会话自动加载,并且您可以使用该功能而无需事先手动 运行 脚本。这类似于 Linux.

中的 .bashrc 文件

在配置文件中设置函数的命令

运行 在您的 PowerShell 中执行这些确切的命令,然后重新启动 PowerShell,然后它将开始工作,您可以在此之后使用 fp 从该用户配置文件中调用该函数。

New-Item -Path $PROFILE.CurrentUserAllHosts -Force
Add-Content -Path $PROFILE.CurrentUserAllHosts -Value 'function fp { set-location "C:\Users\user\puppet\modules\fp\files\configs" }'
exit