Да, этот синтаксис правильный:
Начиная с PowerShell 3.0, вы можете создавать объекты из хеш-таблица свойств и значений свойств.
Синтаксис выглядит следующим образом:
[<class-name>]@{
<property-name>=<property-value>
<property-name>=<property-value>
…
}
Этот метод работает только для классов, которые имеют нулевой конструктор , то есть конструктор, который не имеет параметров. Свойства объекта должны быть publi c и settable .
Для получения дополнительной информации см. about_Object_Creation .
Проверьте первое условие (конструктор без параметров):
[System.Drawing.Font], ### does not have empty constructor
[System.Windows.Forms.Form],
[System.Windows.Forms.Label],
[System.Windows.Forms.Panel] |
Where-Object {
'new' -in ( $_ |
Get-Member -MemberType Methods -Static |
Select-Object -ExpandProperty Name ) -and
$_::new.OverloadDefinitions -match ([regex]::Escape('new()'))
} | Select-Object -ExpandProperty FullName
System.Windows.Forms.Form
System.Windows.Forms.Label
System.Windows.Forms.Panel
Проверьте последнее условие (свойства объекта должны быть опубликованы c и устанавливается):
[System.Windows.Forms.Form],
[System.Windows.Forms.Label],
[System.Windows.Forms.Panel] |
ForEach-Object {
@{ $_.FullName = (
$_.GetProperties('Instance,Public') | Where-Object CanWrite |
Select-Object -ExpandProperty Name | Sort-Object
)
}
}
Name Value
---- -----
System.Windows.Forms.Form {AcceptButton, AccessibleDefaultActionDescription, Acc...
System.Windows.Forms.Label {AccessibleDefaultActionDescription, AccessibleDescrip...
System.Windows.Forms.Panel {AccessibleDefaultActionDescription, AccessibleDescrip...
Сборка обоих приведенных выше фрагментов кода - тривиальная задача…