Aracılığıyla paylaş


Nesne_Oluşturma_Hakkında

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 New-Objectile örnek oluşturabileceğiniz bir sınıf tanımlamanıza olanak tanır.
  • New-Module: AsCustomObject parametresi scriptblock kullanarak tanımladığınız özel bir nesne oluşturur.
  • Add-Member: Mevcut nesnelere özellikler ekler. Add-Member kullanarak [System.Int32]gibi basit bir türde özel nesne oluşturabilirsiniz.
  • Select-Object: Nesnedeki özellikleri seçer. Select-Object kullanarak önceden oluşturulmuş bir nesnede özel ve hesaplanan özellikler oluşturabilirsiniz.

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

  • Statik bir new() metodu kullanarak bir türün oluşturucusunu çağırma
  • Özellik adlarının ve özellik değerlerinin karma tablolarında tür dönüşümü yaparak

Statik new() yöntemi

Tüm .NET türleri, örnekleri daha kolay oluşturmanıza olanak tanıyan bir new() yöntemine 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 sonra new yöntem adını belirtin ve <ENTER>tuşuna basın.

[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 }
  }

new() yöntemi kullanılarak 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 döndürülen DirectoryInfo nesnesine altı Get-Item 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, altı adet NoteProperty değeri içermez.

$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 aşağıdaki gibidir:

[<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.

Test-Object function içindeki komutlar bazı değişken değerleri ayarlar ve ardından bu değerleri kullanarak özel bir nesne oluşturur. Bu nesneyi kullanımda Update-Help cmdlet yardım konusunun ö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, üyelerin listesini, üyelerin nesneye eklenme sırasına göre korur. Hashtable nesneleri anahtar-değer çiftlerinin sırasını garanti etmese de, [pscustomobject] için değişmez bir karma tablo atama sırayı korur.

Karma tablo bir sabit tanım olmalıdır. Hashtable'ı parantez içine alırsanız veya karma tablo içeren bir değişkeni dönüştürürseniz, sıralamanın korunacağı garanti edilmez.

$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, ad alanı nitelenmiş tür adı gerekir, ancak System ad alanı bileşeninin ilk atlayabilirsiniz.

Ö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ıfları 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, New-PSSession parametresinin değeri. Cmdlet bir hash tablosu 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

.NET'teki Genel Türler hakkında daha fazla bilgi için bkz. .

Ayrıca bakınız