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

时间:2016-08-30 16:34:19

标签: powershell

我已经与Powershell合作了一点,我不需要在大多数任务中都有一本书或参考手册。我仍然需要不时在这里搜索或MSDN,但现在它的频率要低得多。

很多关于Powershell的信息都很容易获得,但你只需要知道在哪里看。这就是我被困住的地方。

我想要做的是列出给定对象的所有可接受的属性值,而不必拉出MSDN文档(干燥器比绝缘天花板瓦片干燥)。别在这里误解我;我不是要求列出对象的当前属性或默认属性,我只想列出对象的属性并查看我可用的选项。

以下是我谈论的一个例子:

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

或:

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

第二个查询该特定命名属性的当前值或默认值。第一个将列出包含NameMemberTypeDefinition的表格。 Definition会提供类型,句柄,参数和\或{get; set;}(取决于MemberTypemethodproperty,{{1}等等)。

假设我想设置该特定属性 - 我如何知道哪些值有效以及哪些值无效?

所谈论的内容将是这样的:

event

或:

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

对于$form = New-Object Windows.Forms.Form $form.FormBorderStyle | gm ,有效的可分配值为:FormBorderStyleNoneFixedSingleFixed3DFixedDialog,{{1} },或Sizable。我发现这些的唯一方法是通过在异常期间呈现的文本。如何在不依赖异常的情况下找到这些值?

理想情况下,我不想继续搜索MSDN,TechNet或StackOverflow。是否有我可以在Powershell中使用的cmdlet或查询(在get-help或man之外)给我这些信息? Get-Help \ man在涉及更小,更明确的范围时不是很有用。

不说“Google it”,“RTFM”或“变得好”,你们有什么建议?

感谢。

1 个答案:

答案 0 :(得分:2)

在这种特定情况下,FormBorderStyle是枚举,因此可以使用:

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

快速说明:我的判决并不意味着在其他情况下这不起作用。相同的语法对任何枚举都有效。

归功于@TheMadTechnician,另一种可能的语法:

[Windows.Forms.FormBorderStyle].GetEnumNames()

如果您无法查找枚举的名称,也可以将两者结合起来:

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