我使用PowerShell时很新,并且想知道是否有人会尝试让PowerShell函数返回值。
我想创建一些会返回值的函数:
Function Something
{
# Do a PowerShell cmd here: if the command succeeded, return true
# If not, then return false
}
然后有第二个函数只有在上面的函数为真时才会运行:
Function OnlyTrue
{
# Do a PowerShell cmd here...
}
答案 0 :(得分:7)
您可以在PowerShell中使用return语句:
Function Do-Something {
$return = Test-Path c:\dev\test.txt
return $return
}
Function OnlyTrue {
if (Do-Something) {
"Success"
} else {
"Fail"
}
}
OnlyTrue
如果文件存在,则输出为Success
,如果不存在,则为Fail
。
有一点需要注意,PowerShell函数会返回未捕获的所有内容。例如,如果我将Do-Something的代码更改为:
Function Do-Something {
"Hello"
$return = Test-Path c:\dev\test.txt
return $return
}
然后返回将始终为Success,因为即使文件不存在,Do-Something函数也会返回一个对象数组(“Hello”,False)。有关PowerShell中布尔值的更多信息,请查看 Boolean Values and Operators 。
答案 1 :(得分:5)
你会做这样的事情。 Test命令使用自动变量'$?'。如果最后一个命令成功完成,则返回true / false(有关详细信息,请参阅about_Automatic_Variables主题):
Function Test-Something
{
Do-Something
$?
}
Function OnlyTrue
{
if(Test-Something) { ... }
}
答案 2 :(得分:2)
不要使用True或False,而是使用$ true或$ false
function SuccessConnectToDB {
param([string]$constr)
$successConnect = .\psql -c 'Select version();' $constr
if ($successConnect) {
return $true;
}
return $false;
}
然后以一种干净的方式进行调用:
if (!(SuccessConnectToDB($connstr)) {
exit # "Failure Connecting"
}
答案 3 :(得分:0)
答案很延迟,但在Powershell 5中也有同样的问题。 您可以使用1和0作为返回值。然后您可以将其转换为布尔值或只使用 “ -eq 1”或0
Function Test
{
if (Test-Path c:\test.txt){
return 0
}else{
return 1
}
}
[bool](Test)