假设我想关闭订阅中的所有虚拟机,我可以执行以下操作:
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
命名空间也没有给出关于如何获取数据的想法。
我正在寻找任何方法来检查传递给作业的内容。
答案 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