我已经达到了使用Powershell的地步,我不需要在我身边有一本书或参考手册来完成大多数任务。我仍然需要不时地在这里或MSDN上搜索,但现在已经不那么频繁了。
关于Powershell的很多信息都是现成的,但你只需要知道去哪里看。这就是我被困的地方。
我想做的是列出给定对象的所有可接受的属性值,而不必调出MSDN文档(这比绝缘天花板瓷砖更干燥)。不要误解我的意思;我不是要求列出对象的当前或默认属性,我只是想列出对象的属性,看看我有什么可用的选项。
下面是我而不是谈论的一个例子:
New-Object System.Diagnostics.ProcessStartInfo "PowerShell" | gm
或:
(New-Object System.Diagnostics.ProcessStartInfo "Powershell").FileName
第二个查询特定命名属性的当前值或默认值。第一个将列出一个包含Name
、MemberType
和Definition
的表。Definition
将给出类型、句柄、参数和或{get; set;}
(取决于MemberType
是否为method
、property
、event
等)。
假设我想设置那个特定的属性——我怎么知道哪些值是有效的,哪些是无效的?
我和讨论的内容应该是这样的:
(New-Object Windows.Forms.Form).FormBorderStyle | gm
或:
$form = New-Object Windows.Forms.Form
$form.FormBorderStyle | gm
对于FormBorderStyle
,有效的可赋值为:None
、FixedSingle
、Fixed3D
、FixedDialog
、Sizable
、FixedToolWindow
、SizableToolWindow
。我找到这些的唯一方法是通过异常期间呈现的文本。如何在不依赖异常的情况下找到这些值?
理想情况下,我不想一直搜索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()