我有一个命令Get-Testdata,它从不同的源检索测试数据,并将这些数据存储为PSObject具有不同值的属性.然后将对象的总数存储为数组,以便于操作,排序,计算等.
我的问题是我希望能够将这些数据呈现为(颜色编码的)HTML,我为此编写了另一个命令Show-TestResults.输入参数如下所示
[Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$true)]
[PSObject[]]$InputObject
Run Code Online (Sandbox Code Playgroud)
更新1
这个函数本身是非常基础的,它只是设置了一些参数ConvertTo-HTML,然后将对象传递给该命令:
$head = "<style>[...]" #styling with javascript etc
$header = "<H1>Test Results</H1>
$title = "Test results"
$InputObject | ConvertTo-HTML -head $head -body $header -title $title | Out-File $Filename
Run Code Online (Sandbox Code Playgroud)
END UPDATE 1
但是,当我尝试使用该ValueFromPipeline属性时,使用该调用
Get-Testdata [...] | Show-TestResults
Run Code Online (Sandbox Code Playgroud)
仅显示数组中的第一个对象.但是,如果我改为调用命令
$td = Get-Testdata [...]
Show-TestResults $td
Run Code Online (Sandbox Code Playgroud)
正如预期的那样呈现整个阵列.有人可以解释一下 - 并希望引导我纠正它吗?
ste*_*tej 10
您可能在结束块中处理数据,而不是处理块.
看一个例子:
function getdata {
1
2
3
4
}
function show-data {
param(
[Parameter(mandatory=$true, ValueFromPipeline=$true)]$InputObject,
[Parameter(mandatory=$true)]$FileName
)
# this is process block that is probably missing in your code
begin { $objects = @() }
process { $objects += $InputObject }
end {
$head = "<style></style>"
$header = "<H1>Test Results</H1>"
$title = "Test results"
$objects | ConvertTo-HTML -head $head -body $header -title $title | Out-File $Filename
}
}
getdata | show-data -file d:\temp\test.html
Run Code Online (Sandbox Code Playgroud)
如果需要高级功能,那么我会采用@stej提出的方式。
否则,当函数同时接受管道和参数输入时,我会考虑采用这种简单的技术:
function Show-Data
(
$FileName,
$InputObject
)
{
# this is the trick:
if ($InputObject) { $input = $InputObject }
# process the input (from pipeline or parameter)
$input | ConvertTo-HTML > $FileName
}
# pipe data
Get-ChildItem | Show-Data Test1.htm
# pass via parameter
Show-Data Test2.htm (Get-ChildItem)
Run Code Online (Sandbox Code Playgroud)
NB $input在这种情况下是管道输入的自动变量。
| 归档时间: |
|
| 查看次数: |
11247 次 |
| 最近记录: |