【发布时间】:2020-12-11 13:15:53
【问题描述】:
我正在编写一个脚本来审核我们虚拟环境中的磁盘分区类型。我有这段代码产生以下输出:
$vmName = "VM NAME"
$output = Invoke-VMScript -ScriptText {Get-Disk | select Number, @{name='Size (GB)';expr={[int]($_.Size/1GB)}}, PartitionStyle} -VM $vmName -GuestUser $Username -GuestPassword $Password
$output.ScriptOutput | FT -AutoSize
输出:
Number Size (GB) PartitionStyle
------- --------- --------------
0 160 MBR
仅此一项就可以了,但是我还想添加 VM 的名称,因为这将循环通过数千个 VM。我试过了,但它为 ComputerName 产生了空白输出:
$vmName = "VM NAME"
$output = Invoke-VMScript -ScriptText {Get-Disk | select @{l="ComputerName";e={$vmName}}, Number, @{name='Size (GB)';expr={[int]($_.Size/1GB)}}, PartitionStyle} -VM $vmName -GuestUser $Username -GuestPassword $Password
$output.ScriptOutput | FT -AutoSize
输出:
ComputerName Number Size (GB) PartitionStyle
------------ ------ --------- --------------
0 160 MBR
关于如何完成这项工作的任何想法?
作为奖励,关于如何在其中添加虚拟机的实际名称,因为 vSphere 名称可能不是机器的实际名称,有什么想法吗?
【问题讨论】:
-
FT -AutoSize->FT *,@{Name='VMName';Expression={$vmName}} -AutoSize -
@MathiasR.Jessen 我把最后一行改成了这个,但输出根本没有改变(仍然和输出 #1 一样):“$output.ScriptOutput | FT *,@{ Name='VMName';Expression={$vmName}} -AutoSize"
-
@iRon 也没有运气,仍然与输出 1 相同
-
您确定目标系统尚未添加到您返回的信息中吗?
Invoke-Commandcmdlet 添加了包含远程系统名称的.PSComputerName属性。它通常是隐藏的......你的Invoke-VMScript可能正在做类似的事情。 -
@Lee_Dailey Invoke-VMScript 返回列“VM”、“ExitCode”和“ScriptOutput”。 VM 有 VM 的名称,这很棒。现在需要弄清楚如何将它与 ScriptOutput 结合起来
标签: powershell powercli