【问题标题】:Storing value of a variable as a type将变量的值存储为类型
【发布时间】:2018-12-03 18:10:00
【问题描述】:

好吧 - 真的很挑剔,但我讨厌两次编写相同的代码(即使此时它会为我节省更多时间)

所以我正在编写一个 PowerCLI 函数,它有 2 个开关参数来查找开机或关机事件。

function pGet-PowerEvent {

[cmdletbinding()]

PARAM (

[parameter(ValueFromPipeline=$true,
Mandatory=$true,
Position=0)]
[string[]]
$Entity,

[parameter(ValueFromPipeline=$true,
Mandatory=$false,
Position=1)]
[switch]
$onEvent,

[parameter(ValueFromPipeline=$true,
Mandatory=$false,
Position=2)]
[Switch]
$offEvent

)

if ($onEvent) {
$EventType = "VmPoweredOnEvent"
}

if ($offEvent) {
$EventType = "VmPoweredOffEvent"
}

$entity.ForEach{write-host $_; Get-VIEvent -Entity $_ -MaxSamples([int]::MaxValue) | ?{$_ -is [vmware.vim."$EventType"] | 
select createdtime, username }

}

并运行命令:

pGet-PowerEvent -Entity $vm -OnEvent

和错误:

Cannot convert the "[VMware.Vim.VmPoweredOffEvent]" value of type "System.String" to type "System.Type".

但是,当我运行此命令时 - 它会将 [vmware.vim.vmpoweredoffevent] 视为字符串,而不是类型。

但我需要变量是类型。并将变量的值作为类型。

谢谢

【问题讨论】:

  • 请编辑问题并包含用于调用pGet-PowerEvent 函数的命令。

标签: powershell powercli


【解决方案1】:

我相信你想要:

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

你明白这没有意义吗?

另外,分配PositionMandatory=$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

【讨论】:

  • 酷。因此,这不是要创建一个将值作为类型的变量(无论如何这没有多大意义) - 而是在您将字符串调用为类型时强制它。说得通。而就参数设置而言,lol……这只是一种习惯。我猜旧习惯很难改掉。谢谢你的信息
猜你喜欢
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 2020-06-28
  • 2016-11-12
相关资源
最近更新 更多