А знаете ли вы, что объекты типа 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 откладывается на некоторое время.
Remember Me