【问题标题】:Powershell: retrieve variable type after using Get-VariablePowershell:使用 Get-Variable 后检索变量类型
【发布时间】:2018-04-11 03:03:25
【问题描述】:

在 PowerShell 中,我有一个 ScriptBlock 变量:

$my_scriptblock = { .... }

如果我这样做$my_scriptblock.GetType().Name,我会正确地得到ScriptBlock 的类型。

但我使用Get-Variable 来收集所有用户变量(出于某种原因我需要它)。但是当我使用Get-Variable 收集变量时,它们会转换为PSVariable 类型。

如何获取Get-Variable返回的变量/对象的变量类型?

编辑:更多信息

$my_scriptblock_var = Get-Variable | Where-Object { ('my_scriptblock' -Contains $_.name) }

现在,如果您使用$my_scriptblock_var.GetType().Name,我会得到PSVariable 的类型。这是正确的,Get-Variable 将返回一个它旨在返回的对象。

我的问题是如何找回原来的 Type?

另外,我应该考虑另一种方法来收集所有用户变量吗?

【问题讨论】:

  • this 有帮助吗?
  • 我想我了解您的问题,但请您提供MCV
  • @jrider:我在发布问题之前查看了该问题。我的问题完全不同,因为引用的问题与Get-Variable 没有特别的关系。
  • Get-Variable | % { $_.Value.GetType() }
  • @PetSerAl:完美,这行得通。您也可以将其添加为答案。 EBGreen 下面的回答也有效。我在 powershell 方面不够好,无法判断哪一种是“技术上准确和正确”的使用方式。但是在答案中也有这个会很棒。 - 谢谢

标签: powershell variables


【解决方案1】:

好吧,我有办法做到这一点,但我会说要求本身很可怕。

$var1 = (get-Date)
$gottenVar = (get-variable -name var1)
$gottenVar.Value.GetType().Name

【讨论】:

  • 这里没有必要使用Invoke-Expression(通常不鼓励使用)。在您的第三行中,只需执行 $gottenVar.Value.GetType().Name
  • 好电话。我仍然认为脚本的基本设计存在问题。 :)
【解决方案2】:

Get-Variable 自己返回底层变量对象。要获取值,请使用Get-Variable -value

【讨论】:

  • 抱歉,我不想获取变量的值。我正在寻找变量的类型,在我的情况下应该是ScriptBlock
  • 你需要有变量值才能得到它的类型。例如`获取变量值 | foreach { $_.GetType().Name }
  • 啊,有道理。正是 PerSerAl 在评论中所说的。谢谢,
猜你喜欢
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多