我刚刚创建了一个Powershell函数并将其保存到ps1文件中。 但是,当我尝试从powershell中执行它时,它将无法运行。
我已经通过输入以下命令更改为运行未签名代码的设置:
set-executionpolicy remotesigned
功能如下:
Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
}
它的作用是创建一个文本文件,其中列出了某个文件的所有路径 我把它直接放在c:\下,并命名为listAllPaths文件,与函数相同。
当我在Powershell中输入以下命令时:
PS> listAllPaths.ps1 c:\ *.pdf testingPDF.txt
我收到错误说:
术语'listAllPaths.ps1'不是 被认为是一个cmdlet,函数, 可操作程序或脚本文件。 验证该术语,然后重试。
我尝试了几件事,老实说,我不知道如何让它发挥作用? 我期望在给定路径上创建文件,在本例中为c:\。该文件名为testingPDF.txt,内容由此生成。
有人可以告诉我,我忘了这里。
不,谷歌没有回答所有问题。已经尝试过了。如果我还没有尝试过在线搜索引擎,我不会来这里问。
答案 0 :(得分:11)
这是您的环境路径不包含当前目录的许多平台上的典型错误。因此,当您执行脚本(或命令或程序等)时,您的运行时环境将在除当前/工作目录之外的任何位置查找。
尝试
PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt
编辑: 看完你的评论后,我建议你试一试。我还没有真正验证过PS脚本的逻辑。我只是想让你的脚本先执行。
尝试按如下方式编辑脚本,并按上述方式执行。
Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
}
listAllPaths
答案 1 :(得分:7)
我可能会离开这里,但你的脚本是定义一个函数,而不是执行它吗?也许您需要“获取”脚本:
. .\listallpaths.ps1
...现在定义了你的“listallpaths”函数。
答案 2 :(得分:4)
如果用param替换“function listallpaths”并像这样摆脱周围的{} ..
param([string]$fromFolder, [string]$filter, [string]$printfile)
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
您将拥有一个可以根据需要调用的脚本文件。
PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt
Matt提到,通过声明函数,当你调用脚本时,它会创建函数然后退出。 PowerShell脚本基本上是一个存储在文件中的函数(没有周围的括号......它们是隐含的),其中函数本身将存储在内存中。