功能未运行

时间:2012-02-04 08:32:21

标签: function powershell

我有以下功能:

 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调用它时,没有任何东西在运行..我错过了什么? 而且,我正确地返回变量吗?这是这样做的吗?

1 个答案:

答案 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