针对脚本中涉及到的知识点说明:
1. 脚本输出结果调用office的excel模块输出到一个excel的sheet中
2. 脚本中包含了通过powershell控制excel的cell格式,例如对齐方式,边框样式等等,行列宽度高度自适应(autofit),以及锁定(freeze)首行首列的方法
3. 由于ARM模式下虚拟机,IP,网卡这些资源都是独立的,互相之间引用,如果拿到每一台虚拟机信息后,再去根据其NIC的Id和PublicIP的ID获取对应的对象,那么整个程序执行效率会大打折扣。所以脚本里面采用在执行前用3次请求把虚拟机,网卡,IP的所有对象获取到本地内存,然后再后面引用的时候使用where条件筛选出需要的来提高执行效率
4. 脚本中其他的代码就不赘述了,根据资源属性得到每一列的值就好了
脚本如下:
Function GetResourceNameFromResourceId($resourceId)
{
if ($resourceId -ne $null)
{
return $resourceId.Substring($resourceId.LastIndexOf('/') + 1);
}
return "";
}
Function GetResourcePropertyFromResourceId($resourceId, $propertyName)
{
if ($resourceId -ne $null)
{
$propertyName = $propertyName + "/";
$rgName = $resourceId.Substring($resourceId.IndexOf($propertyName) + $propertyName.Length);
return $rgName.Substring(0, $rgName.IndexOf("/"));
}
return "";
}
$excel = New-Object -ComObject Excel.Application;
$workbook = $excel.Workbooks.add();
$sheet = $workbook.worksheets.Item(1);
$excel.Visible = $true;
# freeze the first column
$sheet.Application.ActiveWindow.SplitColumn = 1;
$sheet.Application.ActiveWindow.SplitRow = 1;
$sheet.Application.ActiveWindow.FreezePanes = $true;
$currentRow