Powershell函数丢失的可变数据

时间:2014-04-23 20:51:31

标签: powershell

我正在尝试创建一个脚本,并一路收集$ message变量中的数据。

我脚本中的第一行是:

$message="Server Validation script run on server $ComputerName at "

这就是输出。

在我的职能中,我有:

$startservice=Start-Service $ServiceName
$message+="$ServiceName is not running attemting to start"

当函数完成工作时,它不会在循环中使用时将消息附加到$ message变量。例     ForEach($ services中的$ servicename){     FuncCheckService $ ServiceName     }

我可以做些什么才能收集变量数据?

2 个答案:

答案 0 :(得分:0)

这是因为该函数在一个单独的工作区中工作,而不是脚本的其余部分。您可能想要做的是将最后一行更改为:

Write-Output "$message$ServiceName is not running attemting to start"

然后当您调用该功能时,您可以执行以下操作:

$Message = StartServiceFunction

然后$ Message捕获函数的任何输出,这将是您想要传递的消息。

或者只是让函数传递不运行并尝试启动的服务,并将其作为$ Message + =运行,如:

$startservice=Start-Service $ServiceName
Write-Output "$ServiceName is not running attemting to start"
ForEach($servicename in $services) { $Message += FuncCheckService $ServiceName }

或者,我不建议这样做,你可以在更新它时引用全局变量:

$global:message+="$ServiceName is not running attemting to start"

这将更新函数外的$ message变量。

答案 1 :(得分:0)

获得所需结果的另一种方法是从FuncCheckService函数返回一个值,然后将其附加到$message
结果将在结尾回显$message的内容:

$message="Server Validation script run on server $ComputerName at "
function FuncCheckService($ServiceName){
    $startservice=Start-Service $ServiceName
    return "$ServiceName is not running attemting to start"
}
ForEach($servicename in $services) { $message+= (FuncCheckService $ServiceName) }
$message