我在Linux上安装了PowerShell
,并创建了一个如下所示的自定义函数,并将其另存为test.ps1
,现在如何通过将值传递给$file
和$name
来调用函数ttr
#!/usr/bin/env pwsh
function ttr {
Param(
$file,
$name
)
Write-Host $file
Write-Host $name
}
发布于 2018-09-13 13:18:46
我相信可能还有其他方法,但这个方法对我很有效
将以下文件保存为/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
发布于 2018-09-13 06:45:39
要使powershell函数可以在powershell脚本之外访问,您必须运行该脚本,以便将所有变量或函数加载到其中。
为此,您需要将函数写为"global:ttr",然后运行脚本。变量要求您将它们编写为"$global:varname“。
之后,在当前shell的持续时间内,您将可以访问所述函数和变量。
发布于 2018-09-13 07:32:09
我刚刚在VSCode编辑器、两个终端和普通的默认PSCore终端上运行了你的post代码示例,它如预期的那样运行。
此外,如果是动词-名词,请记住PowerShell中正确的命名结构。所以你的函数应该是New-ttr。
#!/usr/bin/env pwsh
function New-ttr{
Param(
$file,
$name
)
write-host $file
write-host $name
}
因此,我将代码保存为downloads文件夹中的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,请考虑使用Write-Output或其他Write-* cmdlet之一。
尽管我不确定为什么你要同时通过参数$file和$name,即使在这个测试中。我假设一个是路径,另一个是要查找的文件的名称。您只需在$file中传递文件的完整路径,然后使用$file.Name提取名称即可。
https://stackoverflow.com/questions/52304313
复制相似问题