Contents of this directory is archived and no longer updated.

А знаете ли вы, что объекты типа PsObject можно создавать очень легко?

Очень часто в скриптах мы создаём свои кастомайзенные объекты, наделяем их необходимыми свойствами, в которые уже записываем данные, полученные в процессе работы скрипта. Как это делается в классическом случае:

$Object = New-Object System.Management.Automation.PSObject
$Object | Add-Member NoteProperty Computer  ([PSObject]$null)
$Object | Add-Member NoteProperty Name  ([PSObject]$null)
$Object | Add-Member NoteProperty Path  ([PSObject]$null)
$Object | Add-Member NoteProperty Description  ([PSObject]$null)
...

и так для добавления каждого свойства делать новую строчку. В итоге мы получим вот такой объект:

[vPodans] $Object = New-Object System.Management.Automation.PSObject [vPodans] $Object | Add-Member NoteProperty Computer ([PSObject]$null) [vPodans] $Object | Add-Member NoteProperty Name ([PSObject]$null) [vPodans] $Object | Add-Member NoteProperty Path ([PSObject]$null) [vPodans] $Object | Add-Member NoteProperty Description ([PSObject]$null) [vPodans] $object | gm TypeName: System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method System.Boolean Equals(Object obj) GetHashCode Method System.Int32 GetHashCode() GetType Method System.Type GetType() ToString Method System.String ToString() Computer NoteProperty Computer=null Description NoteProperty Description=null Name NoteProperty Name=null Path NoteProperty Path=null [vPodans]

Но этот процесс можно сделать ещё более простым и коротким:

$Object = "" | Select Computer, Name, Path, Description

Смотрим:

[vPodans] $Object = "" | Select Computer, Name, Path, Description [vPodans] $object | gm TypeName: Selected.System.String Name MemberType Definition ---- ---------- ---------- Equals Method System.Boolean Equals(Object obj) GetHashCode Method System.Int32 GetHashCode() GetType Method System.Type GetType() ToString Method System.String ToString() Computer NoteProperty Computer=null Description NoteProperty Description=null Name NoteProperty Name=null Path NoteProperty Path=null [vPodans]

Видите, в результате объект получился такой же, зато как эффективно! Но и это ещё не всё. Если с Add-Member мы могли сразу присваивать значения параметру через параметр –Value командлета Add-Member, то и здесь мы можем на стадии создания объекта ему что-то присвоить. Присвоение производится по схеме:

$var = ""  | Select @{n = "PropertyName";e={"PropertyValue"}}

Для примера сделаем простой объект с несколькими свойствами и сразу при создании запишем в них значения:

$Object = "" | Select @{n='Computer';e={"компик"}},`@
{n=Name;e={"имя"}},@{n="Path";e={"вот тут путь какой-то"}}

проверяем:

[vPodans] $Object = "" | Select @{n='Computer';e={"компик"}},` >> @{n='Name';e={"имя"}},@{n="Path";e={"вот тут путь какой-то"}} >> [vPodans] $Object | gm TypeName: Selected.System.String Name MemberType Definition ---- ---------- ---------- Equals Method System.Boolean Equals(Object obj) GetHashCode Method System.Int32 GetHashCode() GetType Method System.Type GetType() ToString Method System.String ToString() Computer NoteProperty System.String Computer=компик Name NoteProperty System.String Name=имя Path NoteProperty System.String Path=вот тут путь какой-то [vPodans] $Object | fl * Computer : компик Name : имя Path : вот тут путь какой-то [vPodans]

Вот такими небольшими трюками мы позволяем делать PowerShell очень удобным и простым инструментом.

Вобщем, как говорится - As always enjoy the automation of tools within powershell.exe! © Flowering Weeds :-)

з.ы. По причине краха виртуальных машин, продолжение темы про OCSP откладывается на некоторое время.


Share this article:

Comments:

pan_2@LJ

Пригодилось, спасибо.

www.google.com/accounts/o8/id?id=AItOawljrR17f742ogTJDIwBlZKKNMVfoOVZjdU

Вадим, большое спасибо. Мне очень пригодилось, все коротко и ясно.

www.google.com/accounts/o8/id?id=AItOawljrR17f742ogTJDIwBlZKKNMVfoOVZjdU

Вадим, больше спасибо! Очень пригодилось, все коротко и ясно, по делу.

Comments are closed.