Содержание

Как создавать объёкты в PowerShell?

Используя Hashtables

    [pscustomobject]@{
        firstname = 'Prateek'
        lastname =  'Singh'
    }

С помощью Select-Object

    Select-Object @{n='firstname';e={'Prateek'}},@{n='lastname';e={'Singh'}} -InputObject ''
    #или самый простой способ
    $Object = "" | Select-Object Computer, Name, Path, Description

Используя New-Object и Add-member

    $obj = New-Object -TypeName psobject
    $obj | Add-Member -MemberType NoteProperty -Name firstname -Value 'Prateek'
    $obj | Add-Member -MemberType NoteProperty -Name lastname -Value 'Singh'

Используя New-Object и hashtables

    $properties = @{
        firstname = 'Prateek'
        lastname = 'Singh'
    }       
    $o = New-Object psobject -Property $properties; $o

Вычисляемые поля

  select @{l/name="Название поля";e={вычисляемый блок}}
name/labelуказывает имя создаваемого свойства с использованием метки в качестве псевдонима. name=
expressionблок скрипта, используемый для вычисления нового значения свойства. expression= { $_.<PropertyName> }
Выравнивание(alignment)Когда используется командлет табличного вывода, он определяет способ отображения значений в столбце с использованием left, center, или right в качестве допустимых значений
Formatstringуказывает строку формата, которая является строкой форматирования .NET
Ширина/ widthдля табличного вывода определяет максимальную ширину столбца, которая должна быть больше 0
Глубинаиспользуется только с командлетом Format-Custom. Указывает максимальную глубину расширения для каждого свойства
По возрастанию/убыванию — укажите порядок сортировки одного или нескольких свойств, это логические значения, для которых задано значение $True или $False
Get-ChildItem | Select-Object @{Label="Режим"; Expression={$_.Mode}; Width=8},
                              @{Label="Последняя запись в"; Expression={$_.LastWriteTime}; Width=20},
                              @{Label="Размер"; Expression={$_.Length}; Width=7; Alignment="Left"},
                              @{Label="Имя"; Expression={$_.Name}}
 
Get-Process | Select-Object -Property ProcessName,{$_.StartTime.DayOfWeek}
 
Get-PSDrive C | Format-Table @{Expression={$_.Free/1GB}},@{Expression={$_.Used/1GB}}
Get-PSDrive C | Select-Object @{Expression={$_.Free/1GB}},@{Expression={$_.Used/1GB}}
 
Get-ChildItem | Format-Table @{Label="Режим"; Expression={$_.Mode}; Width=8},
                             @{Label="Последняя запись в"; Expression={$_.LastWriteTime}; Width=20},
                             @{Label="Размер"; Expression={$_.Length}; Width=7; Alignment="Left"},
                             @{Label="Имя"; Expression={$_.Name}}
 
 
Get-NetTcpConnection -State Listen |
           Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}} |
           Sort-Object -Property LocalPort | 
           Format-Table
 
Get-ChildItem *.json -File |
  Format-List Fullname,
              @{
                 name='Modified'
                 expression={$_.LastWriteTime}
                 formatstring='O'
              },
              @{
                 name='Size'
                 expression={$_.Length/1KB}
                 formatstring='N2'
              }
 
 
Get-ChildItem -File |
  Format-Wide -Property @{e={'{0} ({1:N2}kb)' -f $_.name,($_.length/1kb)}}
 
Get-ChildItem -File |
  Sort-Object extension |
    Group-Object -NoElement -Property @{
      expression={
        switch ($_.extension) {
          '.md'   {'Content'}
          ''      {'Metacontent'}
          '.ps1'  {'Automation'}
          '.yml'  {'Automation'}
          default {'Configuration'}
        }
      }
    }
 
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
 
 
$aliases = Get-Alias c* |
  Select-Object Name,
                Definition,
                @{
                    name='ParameterCount'
                    expr={$_.Parameters.Keys.Count}
                }
$aliases | Get-Member
$aliases
 
Import-Csv C:\temp\sales-data.csv |
  Sort-Object Date, @{expr={$_.UnitsSold}; desc=$true}, Salesperson  |
    Select-Object Date, Salesperson, UnitsSold        
 
'1', '10', '2' | Sort-Object { [int] $_ }
 
 
 
$Object | Format-Table @{
  Name = 'Name'
  Expression = { $_.Name }
  Width = 20
},
@{
  Name = 'Date'
  Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
  Width = 10
},
 
 
$Object | Select-Object Name,@{
  Name = 'NewDate'
  Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
}