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

Powershell 正在寻找让所有函数将输出发送到另一个函数的方法,powershell,Powershell,我意识到这个标题有点让人困惑,但我想不出更好的表达方式 我有一个带有几十个函数的Powershell脚本。目前,我在每个函数中都有完全相同的代码来格式化输出。下面是一个片段: function function1 () { do something... output code here } function function2 () { do something... output code here } 输出代码完全相同。作为重复代码消除的粉丝,这让我发疯

我意识到这个标题有点让人困惑,但我想不出更好的表达方式

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

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

function function2 () {
    do something...
    output code here
}
输出代码完全相同。作为重复代码消除的粉丝,这让我发疯,因为每次我添加一个新函数,我都要应用这个模板代码。我曾尝试将整个脚本放在try/catch块中,并抛出输出的对象,但无法使其工作,这仍然需要在每个函数中使用相同的throw语句进行编码


是否有人知道我可以做些什么,让脚本中的所有这些函数自动将其输出发送到另一个函数,还是我只能接受这些函数?

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

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

你在做什么样的输出格式,你是如何输出它们的?这些对象都是同一类型的吗?可能是您正在使用的out-*或write-*的代理函数,可以实现该类型对象的自定义格式设置?这些函数只是输出一个包含少量元素的有序哈希表。它们都是相同的类型。如果它与另一个线程相关,那么我们的想法是哈希表只是按原样从一个测试传递到另一个测试。每次测试都会增加一点内容。在所有测试结束时,您将其传递到新的TestResult函数,它将返回一个从哈希表构建的对象。如果关键测试失败,让它添加该属性,并将其名称作为值。让所有测试只检查该属性,如果存在,则添加值为“跳过”的条目,并将其发送到管道中。在链结束之前不要担心格式问题。如果我想一次性使用这些函数呢?例如,我希望我的测试Wmi函数处于大运行状况检查中,但我也希望执行一些特殊的测试Wmi检查。这些函数都有一个参数。它们是PC检查,我正在对许多PC运行,以检查诸如服务启动、文件存在等内容。