Я полагаю, вы хотите либо:
Where-Object { $_.GetType().FullName -eq "vmware.vim.$EventType" }
Или:
Where-Object { $_ -is ([type]"vmware.vim.$EventType") }
Или это может работать лучше для вас:
Where-Object { $_.GetType().Name -eq $EventType }
Каккроме того, вы почти наверняка не хотите, чтобы все три параметра имели ValueFromPipeline=$true
.
Если вы запустите это:
Get-VM $VMName | pGet-PowerEvent
Это в основном идентично выполнению этого:
$VM = Get-VM @VMParameters
pGet-PowerEvent -Entity $VM -onEvent:$VM -offEvent:$VM
Видите, как это не имеет смысла?
Кроме того, на самом деле не имеет смысла назначать Position
или Mandatory=$false
для переключения параметров.Нет никаких причин, по которым вы когда-либо захотите сделать это:
pGet-PowerEvent $VI $true $false
Вместо этого:
pGet-PowerEvent $VI -onEvent
Это просто гораздо более читабельно.Если вам нужно вызвать его динамически, вам нужно сделать что-то вроде этого:
$OnEventSetting = (Get-Date).DayOfWeek -eq [DayOfWeek]::Monday
$OffEventSetting = (Get-Date).DayOfWeek -eq [DayOfWeek]::Tuesday
pGet-PowerEvent $VI -onEvent:$OnEventSetting -offEvent:$OffEventSetting