powershell - 如何使用powershell将参数从另一个管道输出传递给函数
问题描述
我编写了一个名为 Wait-UntilJobFailOrSuccess 的函数。这使用管道命令行获取 Get-Job 的输出。例如。
Get-Job|Remove-Job
我想为我的功能做同样的事情。例如
Get-Job | Wait-UntilJobFailOrSuccess
我还在下面附加了 Wait-UntilJobFailOrSuccess。请告诉我们。有没有人对此有解决方案。
Function Wait-UntilJobFailOrSuccess
{
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[System.Object[]]$jobs
)
while ($true) {
if ('Failed' -in $jobs.State) {
$jobs | Stop-Job
Write-Host "Aborting Jobs ${result}"
break
}
Start-Sleep -Milliseconds 500
}
foreach ($job in $jobs) {
if ($job.State -eq 'Failed') {
Write-Host ($job.ChildJobs[0].JobStateInfo.Reason.Message) -ForegroundColor Red
} else {
Write-Host (Receive-Job $job) -ForegroundColor Green
}
}
$jobs|remove-Job
}
解决方案
解决方案究竟是什么?你没有说有问题。
无论如何,在您的代码中,您将参数命名为“Jobs”,然后将其设为[ValueFromPipelineByPropertyName]
. Job 对象没有Jobs
属性,所以这不起作用。为此考虑一个单独的参数Id
。此外,不要将参数键入为[object[]]
,而是将[System.Management.Automation.Job[]]
其键入为作业对象的类型。
您应该在process
块中有逻辑来累积所有Job
对象,然后在收集完所有作业后将循环移动到end
块中。
我已经重新格式化了您的代码并对其进行了一些清理,但我仍然无法弄清楚您实际上要做什么:
Function Wait-UntilJobFailOrSuccess
{
[CmdletBinding()]
param(
[Parameter(Mandatory, ValueFromPipeline)]
[System.Management.Automation.Job[]]
$jobs
)
begin
{
$joblist = @()
}
process
{
$joblist += $jobs
}
end
{
foreach ($job in $joblist)
{
if ($job.State -eq 'Failed')
{
Stop-Job -Job $job
Write-Host "Aborting Job $(job.name)"
break
}
}
Start-Sleep -Milliseconds 500
foreach ($job in $jobslist)
{
if ($job.State -eq 'Failed')
{
Write-Host ($job.ChildJobs[0].JobStateInfo.Reason.Message) -ForegroundColor Red
}
else
{
Write-Host (Receive-Job $job) -ForegroundColor Green
}
}
$joblist | Remove-Job -Force # Is this what you really want to do?
}
}
推荐阅读
- android - 如何在 com.google.android.material.chip.Chip 上设置chipText?
- post - Titanium-当我在正文内容中使用 JSONArray 时,发布请求不起作用
- haskell - 如何将字符串转换为 Haskell 中的实际术语?
- javascript - 在 React 样式组件上使用 'ref' 不起作用
- python - 如何在 python 3 中同时执行处理任务和套接字通信?
- react-native - 无法调用 FlatList renderRow 上的方法?
- ios - iOS 理解来自苹果的崩溃日志
- navision - NAV 在日期字段中填充上周范围
- sparql - sparql - 如何通过多个实体进行查询?
- typescript - 如何在项目之间共享 Typescript 类型?