about_Object_Creation

Kısa açıklama

PowerShell'de nesnelerin nasıl oluşturulacağını açıklar.

Uzun açıklama

PowerShell'de nesneler oluşturabilir ve komutlarda ve betiklerde oluşturduğunuz nesneleri kullanabilirsiniz.

Nesne oluşturmanın birçok yolu vardır, bu liste kesin değildir:

  • New-Object: .NET Framework nesnesinin veya COM nesnesinin bir örneğini oluşturur.
  • Import-Csv/ConvertFrom-CSV: Karakterle ayrılmış değerler olarak tanımlanan öğelerden özel nesneler (PSCustomObject) oluşturur.
  • ConvertFrom-Json: JavaScript Nesne Gösterimi'nde (JSON) tanımlanan özel nesneler oluşturur.
  • ConvertFrom-StringData: Anahtar değer çiftleri olarak tanımlanan özel nesneler oluşturur.
  • Add-Type: PowerShell oturumunuzda ile New-Objectörnek oluşturabileceğiniz bir sınıf tanımlamanıza olanak tanır.
  • Yeni Modül: AsCustomObject parametresi, betik bloğunu kullanarak tanımladığınız özel bir nesne oluşturur.
  • Add-Member: Mevcut nesnelere özellikler ekler. gibi [System.Int32]basit bir türde özel nesne oluşturmak için kullanabilirsinizAdd-Member.
  • Select-Object: Nesnedeki özellikleri seçer. Önceden oluşturulmuş bir nesnede özel ve hesaplanan özellikler oluşturmak için kullanabilirsiniz Select-Object .

Bu makalede aşağıdaki ek yöntemler ele alınmıştır:

  • Statik new() bir yöntem kullanarak bir türün oluşturucuyu çağırarak
  • Özellik adlarının ve özellik değerlerinin karma tablolarını türe yazarak

Statik new() yöntemi

Tüm .NET türleri, örnekleri daha kolay oluşturmanıza olanak tanıyan bir new() yönteme sahiptir. Belirli bir tür için tüm kullanılabilir oluşturucuları da görebilirsiniz.

Bir türün oluşturucularını görmek için, tür adından new sonra yöntem adını belirtin ve tuşuna basın <ENTER>.

[System.Uri]::new
OverloadDefinitions
-------------------
uri new(string uriString)
uri new(string uriString, bool dontEscape)
uri new(uri baseUri, string relativeUri, bool dontEscape)
uri new(string uriString, System.UriKind uriKind)
uri new(uri baseUri, string relativeUri)
uri new(uri baseUri, uri relativeUri)

Artık uygun oluşturucuyu belirterek bir System.Uri oluşturabilirsiniz.

[System.Uri]::new("https://www.bing.com")
AbsolutePath   : /
AbsoluteUri    : https://www.bing.com/
LocalPath      : /
Authority      : www.bing.com
...

Örnek oluşturabilmeniz için şu anda hangi .NET türlerinin yüklendiğini belirlemek için aşağıdaki örneği kullanabilirsiniz.

[AppDomain]::CurrentDomain.GetAssemblies() |
  ForEach-Object {
    $_.GetExportedTypes() |
      ForEach-Object { $_.FullName }
  }

yöntemi kullanılarak new() oluşturulan nesneler, PowerShell cmdlet'leri tarafından oluşturulan aynı türdeki nesnelerle aynı özelliklere sahip olmayabilir. PowerShell cmdlet'leri, sağlayıcılar ve Genişletilmiş Tür Sistemi örneğe ek özellikler ekleyebilir.

Örneğin, PowerShell'deki FileSystem sağlayıcısı tarafından Get-Itemdöndürülen DirectoryInfo nesnesine altı NoteProperty değeri ekler.

$PSDirInfo = Get-Item /
$PSDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
    4 CodeProperty
   13 Property
    6 NoteProperty
    1 ScriptProperty
   18 Method

Doğrudan bir DirectoryInfo nesnesi oluşturduğunuzda, bu altı NoteProperty değerine sahip değildir.

$NewDirInfo = [System.IO.DirectoryInfo]::new('/')
$NewDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
    4 CodeProperty
   13 Property
    1 ScriptProperty
   18 Method

Genişletilmiş Tür Sistemi hakkında daha fazla bilgi için bkz . about_Types.ps1xml.

Bu özellik PowerShell 5.0'a eklendi

Karma tablolardan nesne oluşturma

Özelliklerin ve özellik değerlerinin karma tablosundan bir nesne oluşturabilirsiniz.

Söz dizimi şu şekildedir:

[<class-name>]@{
  <property-name>=<property-value>
  <property-name>=<property-value>
}

Bu yöntem yalnızca parametresiz oluşturucuya sahip sınıflar için çalışır. Nesne özellikleri ortak ve ayarlanabilir olmalıdır.

Bu özellik PowerShell sürüm 3.0'a eklendi

Karma tablolardan özel nesneler oluşturma

Özel nesneler çok kullanışlıdır ve karma tablo yöntemi kullanılarak kolayca oluşturulabilir. PSCustomObject sınıfı bu amaç için özel olarak tasarlanmıştır.

Özel nesneler, bir işlevden veya betikten özelleştirilmiş çıktı döndürmek için mükemmel bir yoldur. Bu, yeniden biçimlendirilemeyen veya diğer komutlara aktarılamayan biçimlendirilmiş çıkışı döndürmekten daha kullanışlıdır.

içindeki Test-Object function komutlar bazı değişken değerleri ayarlayın ve ardından bu değerleri kullanarak özel bir nesne oluşturun. Bu nesneyi kullanımda cmdlet yardım konusunun Update-Help örnek bölümünde görebilirsiniz.

function Test-Object {
  $ModuleName = "PSScheduledJob"
  $HelpCulture = "en-us"
  $HelpVersion = "3.1.0.0"
  [PSCustomObject]@{
    "ModuleName"=$ModuleName
    "UICulture"=$HelpCulture
    "Version"=$HelpVersion
  }
  $ModuleName = "PSWorkflow"
  $HelpCulture = "en-us"
  $HelpVersion = "3.0.0.0"
  [PSCustomObject]@{
    "ModuleName"=$ModuleName
    "UICulture"=$HelpCulture
    "Version"=$HelpVersion
  }
}
Test-Object

Bu işlevin çıktısı, varsayılan olarak tablo olarak biçimlendirilmiş özel nesneler koleksiyonudur.

ModuleName        UICulture      Version
---------         ---------      -------
PSScheduledJob    en-us          3.1.0.0
PSWorkflow        en-us          3.0.0.0

Kullanıcılar, standart nesnelerde olduğu gibi özel nesnelerin özelliklerini de yönetebilir.

(Test-Object).ModuleName
 PSScheduledJob
 PSWorkflow

PSObject türü nesneleri, üye listesini, üyelerin nesneye eklendiği sırada tutar. Hashtable nesneleri anahtar-değer çiftlerinin sırasını garanti etmese de, sırayı korumak için [pscustomobject] değişmez bir karma tablo yayınlar.

Karma tablo değişmez değer olmalıdır. Hashtable'ı parantez içinde sarmalarsanız veya karma tablo içeren bir değişken yayınlarsanız, sıranın korunduğunun garantisi yoktur.

$hash = @{
    Name      = "Server30"
    System    = "Server Core"
    PSVersion = "4.0"
}
$Asset = [pscustomobject]$hash
$Asset
System      Name     PSVersion
------      ----     ---------
Server Core Server30 4.0

Karma tablolardan özel olmayan nesneler oluşturma

Özel olmayan sınıflar için nesne oluşturmak için karma tabloları da kullanabilirsiniz. Özel olmayan bir sınıf için bir nesne oluşturduğunuzda, ilk Sistem ad alanı bileşenlerini atlasanız da ad alanı nitelenmiş tür adı gerekir.

Örneğin, aşağıdaki komut bir oturum seçeneği nesnesi oluşturur.

[System.Management.Automation.Remoting.PSSessionOption]@{
  IdleTimeout=43200000
  SkipCnCheck=$True
}

Karma tablo özelliğinin gereksinimleri, özellikle parametresiz oluşturucu gereksinimi birçok mevcut sınıfı ortadan kaldırır. Ancak çoğu PowerShell seçenek sınıfı, bu özelliğin yanı sıra ProcessStartInfo sınıfı gibi diğer çok yararlı sınıflarla çalışacak şekilde tasarlanmıştır.

[System.Diagnostics.ProcessStartInfo]@{
  CreateNoWindow="$true"
  Verb="run as"
}
Arguments               :
ArgumentList            : {}
CreateNoWindow          : True
EnvironmentVariables    : {OneDriveConsumer, PROCESSOR_ARCHITECTURE,
                           CommonProgramFiles(x86), APPDATA...}
Environment             : {[OneDriveConsumer, C:\Users\user1\OneDrive],
                           [PROCESSOR_ARCHITECTURE, AMD64],
                           [CommonProgramFiles(x86),
                           C:\Program Files (x86)\Common Files],
                           [APPDATA, C:\Users\user1\AppData\Roaming]...}
RedirectStandardInput   : False
RedirectStandardOutput  : False
RedirectStandardError   : False
...

Parametre değerlerini ayarlarken karma tablo özelliğini de kullanabilirsiniz. Örneğin, öğesinin SessionOption parametresinin New-PSSessiondeğeri. cmdlet bir karma tablo olabilir.

New-PSSession -ComputerName Server01 -SessionOption @{
  IdleTimeout=43200000
  SkipCnCheck=$True
}
Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{
  Frequency="Daily"
  At="15:00"
}

Genel nesneler

PowerShell'de genel nesneler de oluşturabilirsiniz. Genel türler, depoladıkları veya kullandıkları türlerden biri veya daha fazlası için yer tutucuları (tür parametreleri) olan sınıflar, yapılar, arabirimler ve yöntemlerdir.

Aşağıdaki örnek bir Sözlük nesnesi oluşturur.

$dict = New-Object 'System.Collections.Generic.Dictionary[String,Int]'
$dict.Add("One", 1)
$dict
Key Value
--- -----
One     1

Genel Değerler hakkında daha fazla bilgi için bkz . .NET'te Genel Değerler.

Ayrıca bkz.