2016-11-30 44 views
0

我有一个VM维护脚本,我正在处理,并且正在尝试将输出捕获到日志中。我希望随着脚本的进展收集虚拟机的状态,所以我可以使用我的定时循环进行一些微调以进行检查/操作。多个PowerShell变量在输出行中出现空白

我的问题是我的代码如下。写入输出行中的第一个和第二个VM状态变量在我的输出中始终显示为空白,但在分开放置时会很好地工作。

$Server_1_1D = Get-VMGuest -VM 1st-VM 
$Server_2_1D = Get-VMGuest -VM 2nd-VM 
$Server_3_1D = Get-VMGuest -VM 3rd-VM 
$Server_1_1D_Name = $Server_1_1D.VmName 
$Server_2_1D_Name = $Server_2_1D.VmName 
$Server_3_1D_Name = $Server_3_1D.VmName 
$Server1_1D_Status = $Server_1_1D.State 
$Server2_1D_Status = $Server_2_1D.State 
$Server3_1D_Status = $Server_3_1D.State 
$Server1_1D_Status 
$Server2_1D_Status 
$Server3_1D_Status 
Write-Output "Initial check: $Server_1_1D_Name was $Server_1_1D_Status, $Server_2_1D_Name was $Server_2_1D_Status, and $Server_3_1D_Name was $Server3_1D_Status." 
$Server1_1D_Status 
$Server2_1D_Status 

上述代码的输出。在Write-Output行中,1st-VM和2nd-VM都缺少它们的状态变量,但是第3个VM始终显示出来,无论它们放置在写入输出行中的位置和数量如何:

PS C:\> C:\Scripted_Tasks\Issue.ps1 
Running 
Running 
Running 
Initial check: 1st-VM was , 2nd-VM was , and 3rd-VM was Running 
Running 
Running 

任何帮助或方向是非常感谢。

更新2016年12月1日:什么工作

摆脱了我的变量名,并开始了没有下划线。在Write-Output上得到朋友的一些帮助,以及如何使用括号来调用不同的属性。更干净。

感谢您的回复。

$Server1 = Get-VMGuest -VM “Server1” 
$Server2 = Get-VMGuest -VM “Server2” 
$Server3 = Get-VMGuest –VM “Server3” 
Write-Output "Initial check: $($Server1.VmName) was $($Server1.State), $($Server2.VmName) was $($Server2.State), and $($Server3.VmName) was $($Server3.State)." 

PowerShell的输出现在是:

Initial check: Server1 was Running, Server2 was Running, and Server3 was Running. 
+3

'$ server1_'在你的字符串中的变量名和'$ server_1_'中。 – TessellatingHeckler

回答

0

看来,你在哪里定义的变量,你必须:

$ Server1_,$ Server2_,$ Server3_

当您调用变量输出它时,您正在调用:

$ Server_1_,$ Server_2_,$ Server_3_

号码前添加一个额外的_。

实际上,您正在调用尚未定义的完全不同的变量。

+0

感谢您的协助。我从一个朋友那里得到了一些进一步的帮助,他通过为名称和状态做$($ Server1.property)给了我一个更清晰的写输出。 – Tim