gpt4 book ai didi

powershell - PowerShell:开始作业,接收作业:无返回值

转载 作者:行者123 更新时间:2023-12-03 00:26:50 29 4
gpt4 key购买 nike

好,这是我的脚本

$server=@("SERVER1","SERVER2")
$A=@()

foreach($srv in $server){
start-job -scriptblock {Get-AppHangs $srv}}

while (Get-Job -State "Running"){}

foreach($JB in Get-Job){$A+=Receive-Job $JB}

Remove-Job *

$A|Out-GridView


function Get-AppHangs($srv){
$A=@()
$XX=Get-EventLog -ComputerName $srv -LogName "application" | Where-Object {$_.InstanceID -ge 1000 -and $_.InstanceID -lt 1005} | select -First 5

foreach($x in $XX){
$time = $_.Time.ToString()
$obj=New-Object PSObject
$obj|Add-Member -MemberType "NoteProperty" -Name Server -Value $srv
$obj|Add-Member -MemberType "NoteProperty" -Name Index -Value $x.Index
$obj|Add-Member -MemberType "NoteProperty" -Name Time -Value $x.Time -SecondValue System.string
$obj|Add-Member -MemberType "NoteProperty" -Name EntryType -Value $x.EntryType
$obj|Add-Member -MemberType "NoteProperty" -Name Source -Value $x.Source
$obj|Add-Member -MemberType "NoteProperty" -Name InstanceID -Value $x.InstanceID
$obj|Add-Member -MemberType "NoteProperty" -Name Message -Value $x.Message
$A+=$obj
}
$obj3=New-Object PSObject
$A+=$obj3
return $A
}

我的问题是我期待这条线
$ A | Out-GridView
产生有意义的东西。但是gridview甚至没有弹出。

因此,如果我看不起这个脚本,我看不到任何刺眼的事物,但我希望能有新的眼光回顾一下...

该脚本的目的是能够在事件查看器中找到一组服务器的所有应用程序挂起ID,并显示在漂亮的gridview中...

如果我裁掉了开始工作和接收工作,我就能看到gridview了,但是我想让它运行得更快,更高效。

heeeeelp;)预先感谢!另外我也想不出如何将Time属性添加到我的自定义对象中...如果您有相应的建议,那也将很棒。

更新的脚本:
    $server=@("SERVER1","SERVER2")
$A=@()

foreach($srv in $server)
{
start-job -scriptblock {
$A=@()
$XX=Get-EventLog -ComputerName $srv -LogName "application" | Where-Object {$_.InstanceID -ge 1000 -and $_.InstanceID -lt 1005} | select -First 5

foreach($x in $XX){
$obj=New-Object PSObject
$obj|Add-Member -MemberType "NoteProperty" -Name Server -Value $srv
$obj|Add-Member -MemberType "NoteProperty" -Name Index -Value $x.Index
$obj|Add-Member -MemberType "NoteProperty" -Name EntryType -Value $x.EntryType
$obj|Add-Member -MemberType "NoteProperty" -Name Source -Value $x.Source
$obj|Add-Member -MemberType "NoteProperty" -Name InstanceID -Value $x.InstanceID
$obj|Add-Member -MemberType "NoteProperty" -Name Message -Value $x.Message
$A+=$obj}

$obj3=New-Object PSObject
$A+=$obj3

return $A
}
}
while (Get-Job -State "Running"){}
foreach($JB in Get-Job){$A+=Receive-Job $JB}
Remove-Job *
$A|Out-GridView

最佳答案

您必须传入服务器参数。作业在单独的进程中运行,如果不将其作为参数传递,则无法访问$srv字符串。在PS3.0中,您可以使用“using”范围(例如$using:srv),但是在PS2.0中,您需要在脚本块中使用param(..)-Argumentlist来发送对象。试试这个:

$server=@("SERVER1","SERVER2")

foreach($srv in $server)
{
Start-Job -scriptblock {
param($serv)
$out=@()
$XX=Get-EventLog -ComputerName $serv -LogName "application" | Where-Object {$_.InstanceID -ge 1000 -and $_.InstanceID -lt 1005} | select -First 5

foreach($x in $XX){
$obj=New-Object PSObject
$obj|Add-Member -MemberType "NoteProperty" -Name Server -Value $srv
$obj|Add-Member -MemberType "NoteProperty" -Name Index -Value $x.Index
$obj|Add-Member -MemberType "NoteProperty" -Name EntryType -Value $x.EntryType
$obj|Add-Member -MemberType "NoteProperty" -Name Source -Value $x.Source
$obj|Add-Member -MemberType "NoteProperty" -Name InstanceID -Value $x.InstanceID
$obj|Add-Member -MemberType "NoteProperty" -Name Message -Value $x.Message
$out += $obj
}
$out
} -ArgumentList $srv
}

$A = Get-Job | Wait-Job | Receive-Job
$A | Out-GridView

如果要排除runspaceid(start-job添加的用于指定对象创建位置的属性之一),请尝试以下操作:
$A | Select-Object -Property * -ExcludeProperty RunspaceID | Out-GridView

关于powershell - PowerShell:开始作业,接收作业:无返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609875/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com