Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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-Memberkullanarak[System.Int32]gibi basit bir türde özel nesne oluşturabilirsiniz. -
Select-Object: Nesnedeki özellikleri seçer.
Select-Objectkullanarak ö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
Ö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
PowerShell