如何确定Powershell中对象属性的所有可接受值



我已经达到了使用Powershell的地步,我不需要在我身边有一本书或参考手册来完成大多数任务。我仍然需要不时地在这里或MSDN上搜索,但现在已经不那么频繁了。

关于Powershell的很多信息都是现成的,但你只需要知道去哪里看。这就是我被困的地方。

我想做的是列出给定对象的所有可接受的属性值,而不必调出MSDN文档(这比绝缘天花板瓷砖更干燥)。不要误解我的意思;我不是要求列出对象的当前或默认属性,我只是想列出对象的属性,看看我有什么可用的选项。

下面是我而不是谈论的一个例子:

New-Object System.Diagnostics.ProcessStartInfo "PowerShell" | gm

或:

(New-Object System.Diagnostics.ProcessStartInfo "Powershell").FileName

第二个查询特定命名属性的当前值或默认值。第一个将列出一个包含NameMemberTypeDefinition的表。Definition将给出类型、句柄、参数和或{get; set;}(取决于MemberType是否为methodpropertyevent等)。

假设我想设置那个特定的属性——我怎么知道哪些值是有效的,哪些是无效的?

讨论的内容应该是这样的:

(New-Object Windows.Forms.Form).FormBorderStyle | gm

或:

$form = New-Object Windows.Forms.Form
$form.FormBorderStyle | gm

对于FormBorderStyle,有效的可赋值为:NoneFixedSingleFixed3DFixedDialogSizableFixedToolWindowSizableToolWindow。我找到这些的唯一方法是通过异常期间呈现的文本。如何在不依赖异常的情况下找到这些值?

理想情况下,我不想一直搜索MSDN, TechNet或StackOverflow。是否有一个cmd命令或查询,我可以在Powershell中使用(get-help或man之外)来给我这些信息?Get-Helpman在更小、更明确的范围内不是很有用。

不说"Google it","RTFM",或者"get good",你们有什么建议?

谢谢。

在这个特定的例子中,FormBorderStyle是一个enum,所以它可以工作:

[enum]::getvalues((New-Object Windows.Forms.Form).FormBorderStyle.gettype())

快速注意:我的句子并不意味着这在其他情况下不起作用。相同的语法对任何enum都有效。

归功于@ themad技术员,另一种可能的语法:

[Windows.Forms.FormBorderStyle].GetEnumNames()

如果您懒得查找枚举的名称,也可以将两者组合起来:

(New-Object Windows.Forms.Form).FormBorderStyle.gettype().GetEnumNames()

最新更新