我有以下功能:
function CheckNagiosConfig {
# Query nConf for hosts
Invoke-Expression -command $nconf_command_host | Out-file $nconf_export_host_file
$nconf_export_host = Import-Csv $nconf_export_host_file -Delimiter ";"
# Query nConf for services
Invoke-Expression -command $nconf_command_service | Out-file $nconf_export_service_file
$nconf_export_service = Import-Csv $nconf_export_service_file -Delimiter ";"
return $nconf_export_host
return $nconf_export_service
}
但是当我用CheckNagiosConfig调用它时,没有任何东西在运行..我错过了什么? 而且,我正确地返回变量吗?这是这样做的吗?
答案 0 :(得分:1)
首先你的函数在第一次返回时结束(返回$ nconf_export_host),第二次从未见过。如果你想返回多个东西(一个数组),你应该使用Write-Output
CmdLet。
被修改
对于返回的变量,你至少有三个解决方案:
1)通过写入
使用全局var处理作用域$global:nconf_export_host = Import-Csv $nconf_export_host_file -Delimiter ";"
或
$script:nconf_export_host = Import-Csv $nconf_export_host_file -Delimiter ";"
您可以在功能之外使用$nconf_export_host
。
2)通过引用将参数传递给函数
function CheckNagiosConfig ([ref]$nconf_export_host, [ref]$$nconf_export_service)
{
...
$nconf_export_host.value = Import-Csv $nconf_export_host_file -Delimiter ";"
...
$nconf_export_service.value = Import-Csv $nconf_export_service_file -Delimiter ";"
return $true
}
在这种情况下,您可以保留返回值的语义以指定函数的工作方式,并且可以在函数内部修改引用传递的参数。
3)使用输出本身
function CheckNagiosConfig {
# Query nConf for hosts
Invoke-Expression -command $nconf_command_host | Out-file $nconf_export_host_file
$nconf_export_host = Import-Csv $nconf_export_host_file -Delimiter ";"
write-output $nconf_export_host
# Query nConf for services
Invoke-Expression -command $nconf_command_service | Out-file $nconf_export_service_file
$nconf_export_service = Import-Csv $nconf_export_service_file -Delimiter ";"
return $nconf_export_service
}
用于:
$a = CheckNagiosConfig
# $a[0] will be $nconf_export_host
# $a[1] will be $nconf_export_service