Как вызвать функцию powershell в Linux - PullRequest
0 голосов
/ 13 сентября 2018

Установили PowerShell в Linux и создали пользовательскую функцию, как показано ниже, и сохранили ее как test.ps1. Теперь, как мне вызвать функцию ttr, передав значение $file и $name

#!/usr/bin/env pwsh

function ttr {
    Param(
             $file,
             $name
         )
    Write-Host $file
    Write-Host $name
}

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Я только что запустил ваш пример почтового кода в OSX, в редакторе VSCode, на обоих терминалах и через обычный терминал PSCore по умолчанию, и он работал как положено.

Также запомните правильную конструкцию именования в PowerShell, если используется глагол-существительное.Таким образом, ваша функция должна быть чем-то вроде строки New-ttr.

#!/usr/bin/env pwsh

function New-ttr{
    Param(
             $file,
             $name
         )
    write-host $file
    write-host $name
} 

Итак, я сохранил код как test.ps1 в своей папке загрузок и выполнил…

~/downloads/test.ps1

...от каждого из терминалов.Для запуска в редакторе VSCode достаточно выбрать текст ...

    function New-ttr{
        Param(
                 $file,
                 $name
             )
        $file
        $name
    } 
    New-ttr -$file Somefilename -name somename

выбрать терминал и запустить выбранный текст или запустить активный файл.Наконец, не используйте Write-Host, если вы не раскрашиваете текстовый вывод текста или другие необходимые условия форматирования.Вывод на экран по умолчанию.

Итак, этот ...

write-host $file
write-host $name

.. и этот ...

$file
$name

... будет делать то же самое.

Write-Host не подходит для конвейера и очищает буфер, поэтому его использование настоятельно не рекомендуется.

Если вы хотите использовать запись для вывода на экран, рассмотрите возможность использования Write-Output или одного из других методов Write- *cmdlets.

Хотя я не уверен, почему вы передаете оба параметра $ file и $ name, даже в этом тесте.Я предполагаю, что один - это путь, а другой - имя файла для поиска.Вы можете просто передать полный путь к файлу в $ file и извлечь имя, используя $ file.Name.

0 голосов
/ 13 сентября 2018

Я уверен, что может быть какой-то другой путь, но этот работал для меня

Сохраненный файл ниже /tmp/testscript.ps1

#!/usr/bin/env pwsh
function New-ttr{

    Param(
             $file,
             $name
         )
    write-host $file
    write-host $name
}

создал другой скрипт, как показано ниже, и сохранил в /tmp/callscript.ps1

#!/usr/bin/env pwsh                                                                                                                                                                                                
import-module /tmp/testscript.ps1     
New-ttr -file "Test call in PSCore" -name "Testing"

1011 * тогда *

chmod 777 callscript.ps1

./tmp/callscript.ps1
0 голосов
/ 13 сентября 2018

Чтобы сделать функцию powershell доступной вне скрипта powershell, вам нужно будет запустить скрипт так, чтобы в него загружались любые переменные или функции.

Для этого вам нужно написать функцию как «global: ttr», а затем запустить скрипт. Переменные требуют, чтобы вы записали их как «$ global: varname».

Впоследствии, во время текущей оболочки, у вас будет доступ к указанной функции и переменной.

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