Powershell ps1 file "не распознается как командлет, функция, операционная программа или файл script".
Я сделал функцию 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" не является признанный как командлет, функция, оперативной программы или файла script. Проверьте этот термин и повторите попытку.
Я пробовал несколько вещей, и я честно не знаю, как заставить это работать?
Я ожидаю, что файл будет создан по данному пути, c:\в этом примере. Этот файл имеет имя testingPDF.txt и содержимое, сгенерированное этим.
Может кто-то сказать мне, что я забываю здесь.
И нет, Google не отвечает на все. Пробовал это один уже. Я бы не пришел и не попросил об этом здесь, если бы я не пробовал онлайн-поисковые системы.
Ответы
Ответ 1
Это типичная ошибка на многих платформах, где ваш путь к среде не включает ваш текущий каталог. поэтому, когда вы выполняете свой script (или команду или программу и т.д.), среда выполнения выглядит повсюду, кроме текущего/рабочего каталога.
Попробуйте
PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt
EDIT:
Прочитав ваши комментарии, я собираюсь предложить вам попробовать это. Я на самом деле не проверял логику вашего PS script. Я просто пытаюсь сначала выполнить ваш script.
Попробуйте отредактировать свой script, как показано ниже, и выполните, как указано выше.
Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
}
listAllPaths
Ответ 2
Я мог бы отключиться от базы, но разве ваш script определяет функцию, а не выполняет ее? Возможно, вам нужно "указать" script:
. .\listallpaths.ps1
... так что теперь определена ваша функция listallpaths.
Ответ 3
Если вы замените "function listallpaths" параметром и избавитесь от окружающего {}, как это.
param([string]$fromFolder, [string]$filter, [string]$printfile)
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile
У вас будет файл script, который вы можете вызвать по мере необходимости.
PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt
Как упоминал Мэт, объявив эту функцию, когда вы вызвали script, она создала бы эту функцию и вышла бы. PowerShell script - это в основном функция, хранящаяся в файле (без окружающих скобок.. они подразумеваются), где сама функция хранится в памяти.