Powershell ps1文件“未被识别为cmdlet,函数,可操作程序或脚本文件。”

时间:2009-04-18 04:55:33

标签: powershell

我刚刚创建了一个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,内容由此生成。

有人可以告诉我,我忘了这里。

不,谷歌没有回答所有问题。已经尝试过了。如果我还没有尝试过在线搜索引擎,我不会来这里问。

3 个答案:

答案 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脚本基本上是一个存储在文件中的函数(没有周围的括号......它们是隐含的),其中函数本身将存储在内存中。