Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何从子作业中获取一个属性和输出?_Windows_Powershell_Properties_Jobs - Fatal编程技术网

Windows 如何从子作业中获取一个属性和输出?

Windows 如何从子作业中获取一个属性和输出?,windows,powershell,properties,jobs,Windows,Powershell,Properties,Jobs,我在文件test.ps1中有一个子作业: param($unit) $p = $unit Start-Job -Name $unit -ScriptBlock { param($p) "Hallo $p" New-Object PSCustomObject -Property @{ Not_found = "agurk" } } -ArgumentList $p 当我这样做时: PS> .\test 2 PS> $a=Get-Job|Rece

我在文件test.ps1中有一个子作业:

param($unit)
$p = $unit

Start-Job -Name $unit -ScriptBlock {
    param($p)

    "Hallo $p"
    New-Object PSCustomObject -Property @{
        Not_found = "agurk"
    }
} -ArgumentList $p
当我这样做时:

PS> .\test 2 PS> $a=Get-Job|Receive-Job |Select-Object -Property Not_found PS>\test 2 PS>$a=获取作业|接收作业|选择对象-未找到属性 不幸的是,我

PS> $a.count 2 PS>$a.count 2. 为什么是2而不是1

我必须这么做

PS> $a[1].Not_found agurk PS>$a[1]。未找到 阿古尔克 为了得到这个值


我想创建一个子作业,它生成一些输出,以及一个属性,并且只有一个属性供调用方进行调查。如何实现这一点?

由于作业返回字符串
“Hallo 2”
和自定义对象
@{Not_found=“agurk”}
,因此您的计数为2。从:

在Windows PowerShell®中,每个语句的结果都作为输出返回,即使没有包含Return关键字的语句也是如此

选择对象
不会跳过或删除该字符串,而是创建了一个新的自定义对象,该对象的属性为空
未找到
,因此结果如下:

[ { 'Not_found': '' }, { 'Not_found': 'agurk' } ] 为此:

Write-Host "Hallo $p"
或者首先不要创建不需要的输出

如果需要额外的输出,并且需要能够将其与返回的对象分开重定向,则不能使用
Write Host
,因为该cmdlet直接写入主机控制台(意味着无法捕获或重定向其输出)。相反,您需要写入,例如详细流:

Write-Verbose "Hallo $p"

请注意,您需要PowerShell v3或更高版本才能重定向成功流和错误流以外的流。

由于您的作业返回字符串
“Hallo 2”
和自定义对象
@{Not_found=“agurk”}
,因此您的计数为2。从:

在Windows PowerShell®中,每个语句的结果都作为输出返回,即使没有包含Return关键字的语句也是如此

选择对象
不会跳过或删除该字符串,而是创建了一个新的自定义对象,该对象的属性为空
未找到
,因此结果如下:

[ { 'Not_found': '' }, { 'Not_found': 'agurk' } ] 为此:

Write-Host "Hallo $p"
或者首先不要创建不需要的输出

如果需要额外的输出,并且需要能够将其与返回的对象分开重定向,则不能使用
Write Host
,因为该cmdlet直接写入主机控制台(意味着无法捕获或重定向其输出)。相反,您需要写入,例如详细流:

Write-Verbose "Hallo $p"

请注意,您需要PowerShell v3或更高版本才能重定向成功流和错误流以外的流。

两行的计数来自作业返回两行输出,
“Hallo$p”
和对象

因为您正在执行无条件选择,所以无论属性是否存在,Powershell似乎都在返回对象

您可以更改查询,以检查是否使用
Where对象填充属性

$a = Get-Job | Receive-Job | Where-Object { $_.Not_Found -match ".+" }
然后使用
$a进行访问。未找到

或者,从结果直接访问属性似乎也只返回非空值:

$a = $(Get-Job | Receive-Job | Select-Object -Property Not_Found).Not_Found

计数为2的原因是作业返回两行输出,
“Hallo$p”
和对象

因为您正在执行无条件选择,所以无论属性是否存在,Powershell似乎都在返回对象

您可以更改查询,以检查是否使用
Where对象填充属性

$a = Get-Job | Receive-Job | Where-Object { $_.Not_Found -match ".+" }
然后使用
$a进行访问。未找到

或者,从结果直接访问属性似乎也只返回非空值:

$a = $(Get-Job | Receive-Job | Select-Object -Property Not_Found).Not_Found

好的,但是输出是需要的,因为调用者可能会将其指向一个输出文件。但是调用方还希望检测属性的值。这真的意味着,他必须遍历所有的输出才能找到属性对象吗?如果您希望能够将输出与返回的对象分开重定向,则需要将其写入一个对象,例如详细流(
write verbose
)。请注意,您需要PowerShell v3或更高版本才能重定向成功和错误流以外的流。可以,但需要输出,因为调用方可能会将其定向到输出文件。但是调用方还希望检测属性的值。这真的意味着,他必须遍历所有的输出才能找到属性对象吗?如果您希望能够将输出与返回的对象分开重定向,则需要将其写入一个对象,例如详细流(
write verbose
)。请注意,您需要PowerShell v3或更新版本才能重定向成功和错误流以外的流。