У меня есть сценарий PowerShell, который генерирует вывод JSON объектов VM в среде vSphere.Каждая виртуальная машина имеет свойство пути, которое представляет местоположение виртуальной машины в структуре папок.Вместо того, чтобы папки были представлены в свойстве, как я могу изменить сценарий, чтобы использовать значение пути для создания объектов папок с вложенными объектами ВМ?
Пример сценария PowerShell
$SQL = "USE $SQLDatabase SELECT top 2 * FROM VMs"
$computers = Invoke-sqlcmd -query $SQL -ServerInstance $SQLInstance -Username $SQLUsername -Password $SQLPassword
$connections = @()
$customProperties = @()
ForEach ($computer in $computers) {
$connection = New-Object pscustomobject -Property @{
"Type" = $computer.Type;
"Name" = $computer.Name
"ComputerName" = $computer.ComputerName
"Path" = $computer.$path
}
$connections += $connection
}
@{
Objects = $connections
} |
ConvertTo-Json -Depth 100 |
Write-Host]
Текущий вывод
{
"Objects": [
{
"Path": "Clients A-K/Client 1 (ACC)",
"ComputerName": "VM1",
"Name": "VM1",
"Type": "TerminalConnection"
},
{
"Path": "Clients A-K/Client 1(ACC)",
"ComputerName": "VM2",
"Name": "VM2",
"Type": "RemoteDesktopConnection"
}
]
}
Цель выхода
{
"Objects": [
{
"Type": "Folder",
"Name": "Clients A-K",
"Objects": [
{
"Type": "Folder",
"Name": "Client 1 (ACC)",
"Objects": [
{
"Type": "TerminalConnection",
"Name": "VM1",
"ComputerName": "VM1",
},
{
"Type": "RemoteDesktopConnection",
"Name": "VM2",
"ComputerName": "VM2",
}
]
}
]
}
]
}