2023-03-30-Windows下PowerShell自定义函数
因为一直使用的是Mac,在Mac下打开指定目录的文件,一般是用open
函数,但是windows下的powershell
不支持open
函数
因此我们可以使用Invoke-Item
命令来实现相同的功能。
Invoke-Item /path/file.txt |
但是这个命令比较难以使用,因此想到了自定义一个open
函数,来实现Invoke-Item
同样的功能。
策略支持
首先,在Windows PowerShell
中,执行以下命令
Set-ExecutionPolicy RemoteSigned |
这个命令会将脚本执行策略设置为
RemoteSigned
,允许你运行本地未签名的 PowerShell 脚本和函数。
会显示信息:
执行策略更改 |
输入Y
即可。
构造函数
在PowerShell中,你可以创建一个函数实现Open
命令的功能
function Open { |
这个函数接受一个字符串类型的参数 $Path
,并且使用 Invoke-Item
命令来打开指定路径的文件或者文件夹。使用时,只需要调用 Open
函数并传入需要打开的文件或文件夹的路径即可,例如:
Open C:\path\to\example.txt |
但是当你重新打开PowerShell的时候,运行Open
命令,还是不行,所以我们需要将函数保存在PowerShell的配置文件中。
修改PowerShell配置文件
查看PowerShell版本
不同PowerShell版本的配置文件路径不一样,因此我们可以先查看系统的PowerShell
的版本。
$PSVersionTable |
会显示信息
PSVersion 5.1.19041.1320 # 这个是我们需要的版本号 |
PSVersion
:PowerShell 的版本号。PSEdition
:PowerShell 的版本类型,可能的值为Desktop
(桌面版)或Core
(核心版)。CLRVersion
:PowerShell 运行时使用的 .NET CLR 版本。BuildVersion
:PowerShell 内部版本号。GitCommitId
:PowerShell 代码库的 Git 提交 ID。OS
:当前运行 PowerShell 的操作系统。
当然我们也可以只查看版本信息
$PSVersionTable.PSVersion |
会显示
Major Minor Build Revision |
上面显示我的PowerShell版本为5.1.19041.1320
- 对于 Windows PowerShell v1.0 和 v2.0,配置文件的路径是
$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
。 - 对于 Windows PowerShell v3.0 及更高版本,配置文件的路径是
$HOME\Documents\WindowsPowerShell\profile.ps1
。 - 对于 PowerShell 7 和更高版本,如果是通过 Microsoft Store 或 ZIP 文件安装的,配置文件的路径是
$HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
;如果是通过 MSI 安装的,配置文件的路径是$HOME\Documents\PowerShell\profile.ps1
。
其中,$HOME
表示当前用户的主目录,也可以使用 $env:USERPROFILE
变量来表示。
修改配置文件
如果你无法找到 PowerShell 配置文件,可以通过在 PowerShell 中运行以下命令来创建一个新的配置文件:
New-Item -ItemType File -Path $PROFILE -Force |
这个命令会在默认的 PowerShell 配置文件路径中创建一个名为 profile.ps1
的文件。你可以在这个文件中添加你的自定义函数和别名。
输入命令后,会在控制台输出配置文件的路径,直接进去目录看即可。
我的配置文件路径是
C:\Users\Administrator\Documents\WindowsPowerShell/Microsoft.PowerShell_profile.ps1
。
打开配置文件,在其中输入
function Open { |
在这个示例中,我们先定义了 Open
函数,然后使用 New-Alias
命令创建了一个名为 open
的别名,使其等同于 Open
函数。这样,无论你是在 PowerShell 中还是在命令行中,都可以使用 open
命令来打开指定路径的文件或文件夹了。
保存好 $PROFILE
文件后,下次打开 PowerShell 时,你就可以直接使用 open
命令了,无需再次定义 Open
函数。
其他问题
如果按照上面的步骤操作,使用open
命令,还是不能正常运行的话,可能是因为 $PROFILE
文件存在语法错误或者权限问题。
你可以检查一下 $PROFILE
文件中是否有语法错误。如果有语法错误,PowerShell 会在启动时显示错误信息,并且不会加载 $PROFILE
文件。你可以使用以下命令检查 $PROFILE
文件中的语法错误:
Test-Path $PROFILE -IsValid |
如果这个命令返回 False
,说明 $PROFILE
文件存在语法错误。你需要检查 $PROFILE
文件中的语法,并修复错误。
另外,你还需要确保你有足够的权限来运行自定义函数和别名。如果你使用的是普通用户账户,可能需要以管理员权限运行 PowerShell 才能正常加载 $PROFILE
文件中定义的函数和别名。
如果你已经修复了 $PROFILE
文件中的语法错误,并以管理员权限运行了 PowerShell,但仍然无法正常加载 open
命令,可以尝试在 PowerShell 中显式地加载 $PROFILE
文件,看看是否能够正常运行 open
命令。你可以使用以下命令显式地加载 $PROFILE
文件:
. $PROFILE |
这个命令会立即加载 $PROFILE
文件中的函数和别名,无需退出 PowerShell 并重新启动。如果 open
命令能够正常运行,说明 $PROFILE
文件本身没有问题,可能是自动加载 $PROFILE
文件的机制出了问题。你可以尝试重新打开一个新的 PowerShell 会话,看看是否能够正常加载 $PROFILE
文件中定义的函数和别名。
如果运行. $PROFILE
显示错误
New-Alias : 不允许使用该别名,因为名为“open”的别名已存在 |
那么在配置文件里面删掉New-Alias open Open
这段即可。再次重新打开PowerShell,应该能够正常运行了。