Конечно, это то, для чего предназначен Get-Member ???
<object> | Get-Member -MemberType Property
... или я упустил суть?
Some-CmdLet | Выберите * | Select -First 1
Передаст вам все свойства первого объекта, возвращаемого командлетом, но не обязательно все свойства, которые могут содержать объекты, возвращаемые командлетом.
Многие, если не большинство командлетов возвращают динамические объекты, в которых свойство просто не существует (в отличие от свойства, существующего, но с нулевым или пустым значением), если это свойство не заполнено каким-либо провайдером, из которого получены данные.
Edit2: Кроме того, вы можете попробовать что-то вроде этого:
PS C:\> ForEach($P In $(Get-ADUser ryan -Properties *).PSObject.Properties) { $P.Name }
AccountExpirationDate
accountExpires
AccountLockoutTime
AccountNotDelegated
AllowReversiblePasswordEncryption
BadLogonCount
badPwdCount
c
CannotChangePassword
CanonicalName
....
userAccountControl
userCertificate
UserPrincipalName
uSNChanged
uSNCreated
whenChanged
whenCreated
PropertyNames
PropertyCount
Вы действительно не можете увидеть, что командлет может вернуть, прежде чем вы его даже запустите, из-за объектов динамического возврата ... до запуска неизвестно, что именно он вернет. Например, объект, возвращаемый Get-ADUser, может иметь или не иметь свойство «EmployeeID» в зависимости от того, заполнен он в AD или нет. Я не имею в виду, что свойство будет иметь значение $ Null или [String] :: Empty, я имею в виду, что это свойство буквально не будет существовать для этого объекта.
Если вы используете Set-StrictMode, это особенно очевидно, поскольку он будет лаять на вас за попытку отфильтровать несуществующее свойство объекта, даже если свойство существует на некоторых, но не на других объектах в общем возвращаемом наборе.
Чтобы уточнить мою точку зрения ... когда я создаю командлет, у меня может быть логика в моем командлете, где, если определенное условие истинно, я могу добавить определенное новое свойство к объекту, который должен быть возвращен, или в противном случае свойство не возвращается ...
if($x = $true)
{
$object | Add-Member -Type NoteProperty -Name $name -Value $y
}
Else
{
# In this case, $object will NOT have the above property!
}