Ответ 1
Это возможно с помощью скрытого свойства PSObject
:
$documents.PSObject.Properties | ForEach-Object {
$_.Name
$_.Value
}
У меня есть этот PSObject
(из XML):
bool : {IsActive, ShowOnB2C, ShowOnB2B, IsWebNews}
str : {id, ProductId, GroupName, Unit...}
int : {ProductIdNumeric, Prices_SalesOne, Prices_Treater, Prices_B2C...}
arr : {EnvironmentBrands, Catalogs, NavisionLevels}
long : long
Я хотел бы перебирать свойства без использования имен свойств, например bool
.
Я попытался индексировать объект следующим образом:
$document[0]
Но это ничего не дает, но это тоже не вызывает никаких ошибок.
Select-Object
, но я должен использовать имена свойств, и я не хочу этого.
$documents | Select-Object bool,str
ForEach
не перебирает свойства.
$documents | ForEach {
$_.name
}
возвращает doc, и это имя тега (XML), содержащего bools, ints и строки.
Это возможно с помощью скрытого свойства PSObject
:
$documents.PSObject.Properties | ForEach-Object {
$_.Name
$_.Value
}
Я предпочитаю использовать foreach
для прокрутки объектов PowerShell:
foreach($object_properties in $obj.PsObject.Properties)
{
# Access the name of the property
$object_properties.Name
# Access the value of the property
$object_properties.Value
}
Как правило, foreach
имеет более высокую производительность, чем Foreach-Object
.
И да, foreach
на самом деле отличается от Foreach-Object
под капотом.
Как и в случае с stj, имеется командлет Get-Member
с параметром -MemberType
вы можете использовать:
$documents | Get-Member -MemberType Property | ForEach-Object {
$_.Name
}
Вам также может понадобиться NoteProperty с Get-Member.
$documents | Get-Member -membertype property,noteproperty |
Foreach name
РЕДАКТИРОВАТЬ: сбросить все значения:
$obj = ls test.ps1
$obj | Get-Member -Type property | foreach name |
foreach { "$_ = $($obj.$_)" }
Attributes = Normal
CreationTime = 06/01/2019 11:29:03
CreationTimeUtc = 06/01/2019 15:29:03
Directory = /Users/js
DirectoryName = /Users/js
Exists = True
Extension = .ps1
FullName = /Users/js/test.ps1
IsReadOnly = False
LastAccessTime = 06/05/2019 23:19:01
LastAccessTimeUtc = 06/06/2019 03:19:01
LastWriteTime = 06/01/2019 11:29:03
LastWriteTimeUtc = 06/01/2019 15:29:03
Length = 55
Name = test.ps1