如何在Linux中调用Powershell函数

时间:2018-09-12 22:29:04

标签: powershell

已经在Linux上安装了PowerShell,并创建了如下所示的自定义函数,并将其保存为test.ps1,现在我该如何通过将值传递给{{1}来调用函数ttr }和$file

$name

3 个答案:

答案 0 :(得分:0)

要使Powershell函数可以在Powershell脚本之外访问,必须运行该脚本,以便将所有变量或函数加载进来。

为此,您需要将函数编写为“ global:ttr”,然后运行脚本。变量要求您将其编写为“ $ global:varname”。

然后,在当前Shell期间,您将可以访问所述函数和变量。

答案 1 :(得分:0)

我只是在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- * cmdlet之一。

尽管我不确定为什么要同时通过参数$ file和$ name,即使在此测试中也是如此。我的假设是一个是路径,另一个是要查找的文件名。您只需在$ file中传递文件的完整路径,然后使用$ file.Name提取名称即可。

答案 2 :(得分:0)

确定还有其他方法,但这对我有用

将以下文件保存在/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"

然后

chmod 777 callscript.ps1

./tmp/callscript.ps1