通过快捷方式启动带点源脚本的.ps1文件时函数未识别
解决PowerShell快捷方式启动脚本时函数未找到的问题
问题根因
以管理员权限运行快捷方式时,UAC(用户账户控制)会改变进程的实际工作目录,导致脚本中用相对路径加载的依赖脚本(.\ps\file1.ps1等)无法被正确读取,进而函数未被定义,触发「未识别为 cmdlet/函数」的错误。
解决方法
方法1:用内置变量指定绝对路径
修改myfile.ps1中的依赖脚本引用,使用PowerShell内置变量$PSScriptRoot(代表当前脚本所在的目录)替代相对路径,确保无论工作目录如何变化都能找到依赖文件:
. $PSScriptRoot\ps\file1.ps1 . $PSScriptRoot\ps\file2.ps1 Clear-Host function1 function2
方法2:修改快捷方式的启动命令
将快捷方式的Target改为先切换目标目录,再执行脚本(用-Command参数替代-File):
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -ExecutionPolicy Bypass -Command "cd 'C:\Temp'; .\myfile.ps1"
方法3:排查实际工作目录
在myfile.ps1开头添加Get-Location命令,运行后查看输出的实际工作目录,确认是否为C:\Temp:
Get-Location . .\ps\file1.ps1 . .\ps\file2.ps1 Clear-Host function1 function2
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

