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-Item
dö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-PSSession
değ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.
PowerShell