public/Get-UnraidVm.ps1
|
function Get-UnraidVm { <# .SYNOPSIS Lists virtual machines. .PARAMETER Name Filter by name (supports wildcards). .PARAMETER Session Unraid session (defaults to current session). .EXAMPLE Get-UnraidVm .EXAMPLE Get-UnraidVm -Name "Windows*" #> [CmdletBinding()] [OutputType("UnraidVm")] param( [Parameter(Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string[]]$Name, [Parameter()] [UnraidSession]$Session = $script:DefaultUnraidSession ) process { $gqlQuery = @" query GetVms { vms { domains { id name state } } } "@ $result = Invoke-UnraidQuery -Query $gqlQuery -Session $Session # Todo: Create UnraidVm class? $vmList = [System.Collections.Generic.List[UnraidVm]]::new() if ($result.vms -and $result.vms.domains) { foreach ($domain in $result.vms.domains) { $vmObj = [UnraidVm]::new($domain) # Clean up display a bit; not really necessary to see all properties by default, even though there aren't many right now $propSet = [System.Management.Automation.PSPropertySet]::new('DefaultDisplayPropertySet', [string[]]@('Name', 'State')) $memberSet = [System.Management.Automation.PSMemberSet]::new('PSStandardMembers', [System.Management.Automation.PSMemberInfo[]]@($propSet)) $vmObj.PSObject.Members.Add($memberSet) $shouldOutput = $false if (! $Name) { $shouldOutput = $true } else { foreach ($filter in $Name) { if ($vmObj.Name -like "*$filter*") { $shouldOutput = $true break } } } if ($shouldOutput) { $vmList.Add($vmObj) } } } $vmList | Sort-Object Name } } |