Файл Powershell PS1 «не распознается как командлет, функция, работающая программа или файл сценария». - PullRequest
21 голосов
/ 18 апреля 2009

Я только что сделал функцию 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» не является распознается как командлет, функция, работоспособная программа или файл сценария. Проверьте срок и попробуйте снова.

Я пробовал несколько вещей и, честно говоря, не знаю, как заставить это работать? Я ожидаю, что файл будет создан по указанному пути, c: \ в этом примере. Этот файл с именем testingPDF.txt и сгенерированным содержимым this.

Может кто-нибудь сказать мне, что я здесь забываю.

И нет, Google не отвечает на все вопросы. Попробовал тот уже. Я бы не пришел сюда и не спросил бы об этом, если бы я еще не попробовал поисковые системы онлайн.

Ответы [ 3 ]

11 голосов
/ 18 апреля 2009

Это типичная ошибка на многих платформах, где путь к вашей среде не включает ваш текущий каталог. поэтому, когда вы выполняете свой скрипт (или команду, или программу и т. д.), ваша среда выполнения выглядит везде, кроме вашего текущего / рабочего каталога.

Попробуйте

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt

EDIT: Прочитав ваши комментарии, я собираюсь предложить вам попробовать это. Я на самом деле не проверил логику вашего сценария PS. Я просто пытаюсь заставить ваш сценарий выполняться первым.

Попробуйте отредактировать ваш скрипт, как показано ниже, и выполните, как указано выше.

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
}

listAllPaths
7 голосов
/ 18 апреля 2009

Я мог бы быть неосновным здесь, но разве ваш сценарий определяет функцию, а не выполняет ее? Возможно, вам нужно «сгенерировать» скрипт:

. .\listallpaths.ps1

... так что теперь ваша функция "listallpaths" определена.

4 голосов
/ 18 апреля 2009

Если вы замените «listpath функции» на param и избавитесь от окружающих {}, как это ..

param([string]$fromFolder, [string]$filter, [string]$printfile)
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile

У вас будет файл сценария, который вы можете вызывать по мере необходимости.

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt

Как намекал Мэтт, объявляя функцию, когда вы вызываете скрипт, она создаст функцию и затем выйдет. Сценарий PowerShell - это, в основном, функция, хранящаяся в файле (без окружающих скобок ... они подразумеваются), где сама функция будет храниться в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...