获取作业输入或传递给它的数据

时间:2017-12-30 10:29:02

标签: powershell azure

假设我想关闭订阅中的所有虚拟机,我可以执行以下操作:

Get-AzureRmVm | Stop-AzureRmVM -Force -AsJob

这几乎会瞬间发生,并会创造一堆工作。这些乔布斯唯一的问题是我无法破译每项工作的作用。它们看起来都一样。

State                : Completed
HasMoreData          : True
Location             : localhost
StatusMessage        : Completed
CurrentPSTransaction :
Host                 : System.Management.Automation.Internal.Host.InternalHost
Command              : Stop-AzureRmVM
JobStateInfo         : Completed
Finished             : System.Threading.ManualResetEvent
InstanceId           : dc0da9c0-5dc7-4186-86b8-c53c21e8c690
Id                   : 2
Name                 : Long Running Operation for 'Stop-AzureRmVM'
PSJobTypeName        : AzureLongRunningJob`1
Output               : {Microsoft.Azure.Commands.Compute.Models.PSComputeLongRunningOperation}
Debug                : {[AzureLongRunningJob]: Starting cmdlet execution, setting for cmdlet confirmation required:
                       'False', [AzureLongRunningJob]: Completing cmdlet execution in RunJob

输出如下:

OperationId :
Status      : Succeeded
StartTime   : 30/12/2017 12:03:58
EndTime     : 30/12/2017 12:04:00
Error       :

这使我无法弄清楚这项工作正在进行的VM 我尝试用Get-Job | Get-Member -Force查看作业属性,但我找不到任何东西,这对我有帮助(命令,'jobstateinfo',信息等)。查看System.Management.Automation命名空间也没有给出关于如何获取数据的想法。

我正在寻找任何方法来检查传递给作业的内容。

2 个答案:

答案 0 :(得分:0)

State                : Completed
HasMoreData          : True

看起来这些工作已经完成但是他们的输出还没有被退回。您需要Receive-Job命令来检索任何输出或结果。

$Jobs = Get-AzureRmVm | Stop-AzureRmVM -Force -AsJob
$Jobs | Where-Object State -eq 'Completed' | Receive-Job -Keep

请参阅Get-Help about_Jobs,您真的想查看Receive-Job命令的参数,以确定您希望它执行的操作。我也没有使用*-AzureRmVm命令,所以请注意这一点。

答案 1 :(得分:0)

我最终做了这样的事情:

$variable = my command | Add-Member @{ id = $_.Id } -PassThru

我以后可以这样访问:

$variable.id