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