А знаете ли вы, что объекты типа 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 откладывается на некоторое время.
Пригодилось, спасибо.
Вадим, большое спасибо. Мне очень пригодилось, все коротко и ясно.
Вадим, больше спасибо! Очень пригодилось, все коротко и ясно, по делу.
Comments: