寻找一种让所有函数将输出发送到另一个函数的方法

时间:2012-03-22 19:11:33

标签: powershell

我意识到标题有点令人困惑,但我无法想出一个更好的方式来表达它。

我有一个包含几十个函数的Powershell脚本。目前,我在每个函数中都有完全相同的代码来格式化输出。这是一个片段:

function function1 () {
    do something...
    output code here
}

function function2 () {
    do something...
    output code here
}

输出代码完全相同。作为代码重复数据删除的粉丝,这让我发疯,因为每次添加新功能时,我都会使用这个模板代码,我必须应用它。我已经尝试将整个脚本放在try / catch块中并抛出输出的对象但我无法使其工作,这仍然需要在每个函数的相同throw语句中进行编码。

有没有人知道我可以做些什么来让这个脚本中的所有这些函数自动将它们的输出发送到另一个函数,或者我只是不得不忍受这个?

1 个答案:

答案 0 :(得分:2)

如果函数没有参数,您可以使用这个简单的解决方案:

function addOutputCode {
    param($name)
    $oldBody = (get-item function:$name).ScriptBlock
    $newBody = {
        param($computer) 
        $funcOutput = . $oldBody $computer
        # some formatting
        $funcOutput | % { 'FORMATTED: ' + $_ }
    }.GetNewClosure()
    Set-Item function:$name -value $newBody
}

正如您所看到的,函数获取函数的主体并使用格式代码指定新主体。你可以尝试一下,只需复制&粘贴下面的代码。

# this is your file with defined functions
function f1 { param($c) 'this is test of ' + $c }
function f2 { $c.Length; 'this was length of $c' }
# now f1 and f2 would return unformatted data
# f1 
# f2

# add formatting code
addOutputCode f1
addOutputCode f2
# now if you call f1 or f2, they return formatted data
# f1 comp1
# f2 comp2