6. Dönüşümler

Editörün notu

Önemli

Windows PowerShell Dil Belirtimi 3.0 Aralık 2012'de yayımlandı ve Windows PowerShell 3.0'ı temel alır. Bu belirtim PowerShell'in geçerli durumunu yansıtmaz. Bu belgeleri geçerli durumu yansıtacak şekilde güncelleştirme planı yoktur. Bu belgeler, geçmişe yönelik başvuru için burada sunulmuştur.

Belirtim belgesi şu konumdaki Microsoft Yükleme Merkezi Microsoft Word belge olarak kullanılabilir: https://www.microsoft.com/download/details.aspx?id=36389 Bu Word belge burada Microsoft Learn'de sunu için dönüştürüldü. Dönüştürme sırasında, Docs platformu için biçimlendirmeye uyum sağlamak için bazı editoryal değişiklikler yapılmıştır. Bazı yazım hataları ve küçük hatalar düzeltildi.

tür dönüştürme, farklı bir tür gerektiren bir bağlamda bir tür değeri kullanıldığında gerçekleştirilir. Böyle bir dönüştürme otomatik olarak gerçekleşirse, örtük dönüştürmeolarak bilinir. (Bunun yaygın bir örneği, işlenen tarafından belirlenen değerlerden birini veya daha fazlasını dönüştürmesi gereken bazı operatörlerdir.) Kaynak değerin anlamının korunması koşuluyla, dönüştürüldüğünde bir sayının kesinlik kaybı olmaması gibi durumlarda örtük dönüştürmeye izin verilir.

Dönüştürme operatörü (§7.2.9) açık dönüştürmesağlar.

Dönüştürmeler aşağıda açıklanmıştır ve §6.19içindeki her operatörün açıklamasında gerekli ek bilgiler sağlanmıştır.

Bir değerin zaten sahip olduğu türe açıkça dönüştürülmesi, bu değerde veya gösteriminde hiçbir değişikliğe neden olmaz.

bir ifadenin değeri bir parametreye bağlanırken dönüştürmeyi teslim etme kuralları §6.17kapsamındadır.

6.1 Boş türe dönüştürme

Herhangi bir türdeki değer, void türüne açıkça dönüştürülerek atılabilir. Sonuç yok.

6.2 Bool'a dönüştürme

Herhangi bir değeri bool türüne dönüştürme kuralları aşağıdaki gibidir:

  • Sıfırın sayısal veya karakter değeri False'a dönüştürülür; sıfır olmayan sayısal veya karakter değeri True'ya dönüştürülür.
  • Null türünde bir değer False'a dönüştürülür.
  • Uzunluğu 0 olan bir dize False'a dönüştürülür; > 0 uzunluğundaki bir dize True'ya dönüştürülür.
  • [switch] Değeri $true olan bir parametre True'ya, değeri olan bir parametre $false ise False'a dönüştürülür.
  • Diğer tüm null olmayan başvuru türü değerleri True'ya dönüştürülür.

Tür IList uyguluyorsa:

  • Nesnenin Uzunluğu > 2 ise, değer True'ya dönüştürülür.
  • Nesnenin Uzunluğu 1 ise ve ilk öğe kendisi bir IList değilse, bu öğenin değeri true ise değer True'ya dönüştürülür.
  • Aksi takdirde, ilk öğenin Count >= 1 ise, değer True'ya dönüştürülür.
  • Aksi takdirde, değer False'a dönüştürülür.

6.3 Karaktere dönüştürme

Herhangi bir değeri char türüne dönüştürme kuralları aşağıdaki gibidir:

  • Boolean, decimal, float veya double türündeki bir değerin dönüştürülmesinde bir hata var.
  • Null türündeki bir değer null (U+0000) karakterine dönüştürülür.
  • Değeri char türünde temsil edilebilen bir tamsayı türü değeri bu değere sahiptir; aksi takdirde dönüştürme işlemi hatayla karşılanır.
  • Uzunluğu 1'den farklı olan bir dize değerinin dönüştürülmesi hatadır.
  • Uzunluğu 1 olan dize değeri, bu karakterin değerine sahip bir karaktere dönüştürülür.
  • Herhangi bir kesirli kısmının yuvarlanmasından sonra, değeri hedef türde temsil edilebilen sayısal tür değeri, bu yuvarlanmış değeri alır; aksi takdirde, dönüştürme işlemi bir hatayla sonuçlanır.
  • Diğer başvuru türü değerleri için, başvuru türü böyle bir dönüştürmeyi destekliyorsa, bu dönüştürme kullanılır; aksi takdirde dönüştürme işlemi hatayla karşılanır.

6.4 Tamsayıya dönüştürme

Herhangi bir değeri bayt, int veya uzun türüne dönüştürme kuralları aşağıdaki gibidir:

  • False bool değeri sıfıra dönüştürülür; True bool değeri 1'e dönüştürülür.
  • Değeri hedef türde gösterilebilen bir karakter türü değeri bu değere sahiptir; aksi takdirde dönüştürme işlemi hatayla karşılanır.
  • Herhangi bir kesirli kısmının yuvarlanmasından sonra, değeri hedef türde temsil edilebilen sayısal tür değeri, bu yuvarlanmış değeri alır; aksi takdirde, dönüştürme işlemi bir hatayla sonuçlanır.
  • Null türünde bir değer sıfıra dönüştürülür.
  • Bir sayıyı temsil eden bir dize, §6.16içinde açıklandığı gibi dönüştürülür. Kesirli bölümün kesilmesinden sonra sonuç hedef türde gösterilebiliyorsa, dize iyi biçimlendirilmiştir ve hedef türüne sahiptir. Aksi takdirde, dönüştürme hatalıdır. Dize bir sayıyı temsil etmiyorsa, dönüştürme hatalıdır.
  • Diğer başvuru türü değerleri için, başvuru türü böyle bir dönüştürmeyi destekliyorsa, bu dönüştürme kullanılır; aksi takdirde dönüştürme işlemi hatayla karşılanır.

6.5 Kayan ve çift dönüştürme

Herhangi bir değeri float veya double türüne dönüştürme kuralları aşağıdaki gibidir:

  • False bool değeri sıfıra dönüştürülür; True bool değeri 1'e dönüştürülür.
  • Karakter değeri tam olarak temsil edilir.
  • Sayısal tür değeri, mümkünse tam olarak temsil edilir; ancak int, long ve decimal türlerinin float'a ve long ve decimal türlerinin double'a dönüştürülmesi sırasında, tamsayı değerinin en az önemli bitlerinden bazıları kaybolabilir.
  • Null türünde bir değer sıfıra dönüştürülür.
  • Bir sayıyı temsil eden bir dize, §6.16içinde açıklandığı gibi dönüştürülür; aksi takdirde dönüştürme işlemi hatayla karşılanır.
  • Diğer başvuru türü değerleri için, başvuru türü böyle bir dönüştürmeyi destekliyorsa, bu dönüştürme kullanılır; aksi takdirde dönüştürme işlemi hatayla karşılanır.

6.6 Ondalığa dönüştürme

Herhangi bir değeri ondalık türüne dönüştürme kuralları aşağıdaki gibidir:

  • False bool değeri sıfıra dönüştürülür; True bool değeri 1'e dönüştürülür.
  • Karakter türü değeri tam olarak temsil edilir.
  • Sayısal tür değeri tam olarak temsil edilir; ancak, bu değer hedef türe sığmayacak kadar büyük veya çok küçükse, dönüştürme hatası verir.
  • Null türünde bir değer sıfıra dönüştürülür.
  • Bir sayıyı temsil eden bir dize, §6.16içinde açıklandığı gibi dönüştürülür; aksi takdirde dönüştürme işlemi hatayla karşılanır.
  • Diğer başvuru türü değerleri için, başvuru türü böyle bir dönüştürmeyi destekliyorsa, bu dönüştürme kullanılır; aksi takdirde dönüştürme işlemi hatayla karşılanır.
  • Başarılı bir dönüştürmenin sonucunun ölçeği, kesirli bölümün sonunda sıfır olmamasıdır.

6.7 Nesneye dönüştürme

Null türü (4.1.2) dışında herhangi bir türün değeri tür nesnesine dönüştürülebilir. Değer, türünü ve gösterimini korur.

6.8 Dizeye dönüştürme

Herhangi bir değeri tür dizesine dönüştürme kuralları aşağıdaki gibidir:

  • $false bool değeri "False" olarak dönüştürülür; $true bool değeri "True" olarak dönüştürülür.
  • Karakter türü değeri, bu karakteri içeren 1 karakterlik bir dizeye dönüştürülür.
  • Sayısal bir değer, karşılık gelen sayısal literal biçiminde bir dizeye dönüştürülür. Ancak, sonuç, başta veya sonda boşluk bulundurmaz, başta artı işareti yoktur, tamsayılar ondalık sisteme sahiptir ve tür soneki bulunmaz. Ondalık dönüştürme için ölçek korunur. -∞, +∞ ve NaN değerleri için, sonuçta elde edilen dizeler sırasıyla "-Infinity", "Infinity" ve "NaN" olur.
  • Null türünde bir değer boş dizeye dönüştürülür.
  • 1 boyutlu bir dizi için, sonuç bu dizideki her öğenin değerinin baştan sona dize formatına dönüştürülmüş hâlini içeren ve öğelerin geçerli Çıkış Alanı Ayırıcısı (§2.3.2.2) ile ayrıldığı bir dizedir. Kendi dizileri olan öğelere sahip bir dizi için, yalnızca en üst düzey öğeler dönüştürülür. Dizi olan bir öğenin değerini temsil etmek için kullanılan dize, uygulama tanımlıdır. Çok boyutlu bir dizi için tek boyutlu hale getirilir (§9,12) ve ardından 1-boyutlu dizi olarak kabul edilir.
  • Null türünde bir değer boş dizeye dönüştürülür.
  • Komut bloğu türü değeri, bu bloğun metnini içeren ve { ile } karakterleri olmadan bir dizeye dönüştürülür.
  • Numaralandırma türü değeri için sonuç, bu değerde kodlanmış her numaralandırma sabitinin adını virgülle ayırarak içeren bir dizedir.
  • Diğer başvuru türü değerleri için, başvuru türü böyle bir dönüştürmeyi destekliyorsa, bu dönüştürme kullanılır; aksi takdirde dönüştürme işlemi hatayla karşılanır.

Dizi olan bir öğenin değerini temsil etmek için kullanılan dize, System.Type[], System.Type[,]vb. biçimindedir. Diğer başvuru türleri için ToString metodu çağrılır. Diğer numaralandırılabilir türler için kaynak değer 1 boyutlu bir dizi olarak değerlendirilir.

6.9 Diziye dönüştürme

Herhangi bir değeri dizi türüne dönüştürme kuralları aşağıdaki gibidir:

  • Hedef türü çok boyutlu bir dizi olmayabilir.
  • Null türünde bir değer olduğu gibi korunur.
  • $null dışında bir skaler değer veya karma tablo türündeki bir değer için, değeri hedef öğe türüne dönüştürüldikten sonra skaler olan yeni bir 1 öğeli dizi oluşturulur.
  • 1 boyutlu dizi değeri için, hedef türünde yeni bir dizi oluşturulur ve her öğe kaynak diziden hedef dizideki karşılık gelen öğeye dönüştürülerek kopyalanır.
  • Çok boyutlu bir dizi değeri için, bu dizi önce düzleştirilmiş (§9,12) ve ardından 1 boyutlu dizi değeri olarak kabul edilir.
  • Dize değeri, dizide karşılık gelen konumları kaplayan dizedeki ardışık karakterlerle aynı uzunluğa sahip bir karakter dizisine dönüştürülür.

Diğer numaralandırılabilir türler için, böyle bir dönüştürme varsa, hedef öğe türüne dönüştürmeden sonra değeri karşılık gelen öğe olan yeni bir 1 öğeli dizi oluşturulur. Aksi takdirde dönüştürme işlemi hatayla karşılanır.

6.10 Xml'ye dönüştürme

nesnesi tür dizesine ve ardından xmltüründe bir XML Belgesi nesnesine dönüştürülür.

6.11 Regex'e dönüştürme

Tür dizesi değerini belirten bir ifade regextürüne dönüştürülebilir.

6.12 Betik bloğuna dönüştürme

Herhangi bir değeri tür scriptblock dönüştürme kuralları aşağıdaki gibidir:

  • Dize değeri, isteğe bağlı olarak bu komuta yapılan bir çağrının bağımsız değişkenleri tarafından takip edilen bir komutun adı olarak değerlendirilir.

6.13 Numaralandırma türlerine dönüştürme

Herhangi bir değeri numaralandırma türüne dönüştürme kuralları aşağıdaki gibidir:

  • Bir numaralandırma türü için adlandırılmış değerlerden birini (büyük/küçük harfe göre) içeren tür dizesinin değeri bu adlandırılmış değere dönüştürülür.
  • Bir numaralandırma türü için adlandırılmış değerlerin virgülle ayrılmış listesini (büyük/küçük harfe göre) içeren tür dizesinin değeri, tüm bu adlandırılmış değerlerin bit düzeyinde OR değerine dönüştürülür.

6.14 Diğer başvuru türlerine dönüştürme

Herhangi bir değeri dizi türü veya dize dışında bir başvuru türüne dönüştürme kuralları aşağıdaki gibidir:

  • Null türünde bir değer olduğu gibi korunur.
  • Aksi takdirde, davranış uygulamaya bağlı olarak tanımlıdır.

Burada devreye giren bir dizi makine var; bunlar, değer bir karma tablo olduğunda tek argümanlı oluşturucuların veya varsayılan oluşturucuların olası kullanımı, örtük ve açık dönüştürme işleçleri ve hedef türü için Parse yöntemlerini içerir; Convert.ConvertTo kullanımı; ve ETS dönüştürme mekanizması.

6.15 Olağan aritmetik dönüştürmeler

Eğer hiçbir işlenen sayısal türe sahip bir değeri belirtmiyorsa,

  • Sol işlenen bool türünde bir değer belirtiyorsa, dönüştürme hatalıdır.
  • Aksi takdirde, $null değerini belirlemeye yönelik tüm işlenenler int türünde sıfıra dönüştürülür ve işlem aşağıda listelenen sayısal dönüştürmelerle devam eder.
  • Aksi takdirde, sol işlenen char türünde bir değer ve sağ işlenen bool türünde bir değer belirtiyorsa, dönüştürme hatalıdır.
  • Aksi takdirde, sol işlenen dize türünde bir değer belirtiyorsa ama bir sayıyı (§6.16) temsil etmiyorsa, dönüştürme hata verir.
  • Aksi takdirde, sağ işlenen dize türünden bir değeri ifade ediyor ancak bir sayıyı temsil etmiyorsa (§6.16), dönüştürme hatalıdır.
  • Aksi takdirde, dize türündeki değerleri belirlemeye yönelik tüm işlenenler sayılara (§6.16) dönüştürülür ve işlem aşağıda listelenen sayısal dönüştürmelerle devam eder.
  • Aksi takdirde dönüştürme işlemi hatayla karşılanır.

Sayısal dönüştürmeler:

  • Bir işlenen ondalık türünde bir değer belirlemişse, diğer işlenen tarafından belirlenen değer gerekirse bu türe dönüştürülür. Sonucun türü ondalık olur.
  • Aksi takdirde, bir işlenen double türünde bir değer belirlemişse, diğer işlenen tarafından belirlenen değer gerekirse bu türe dönüştürülür. Sonucun veri türü double.
  • Aksi takdirde, bir işlenen float türünde bir değer belirlemişse, gerekirse her iki işlenen tarafından belirlenen değerler double türüne dönüştürülür. Sonucun veri türü double.
  • Aksi takdirde, bir operand uzun türünde bir değer tanımlıyorsa, diğer operandın belirlediği değer gerekirse bu türe dönüştürülür. Sonuç, değerini temsil edebilen 'long' ve 'double' dizisindeki ilk türdür.
  • Aksi takdirde, her iki işlenenin belirlediği değerler gerekirse int türüne dönüştürülür. Sonuç, değerini kesilmeden gösterebilen ilk int, long, double sırasına sahiptir.

6.16 Dizeden sayısal türe dönüştürme

İçeriğine bağlı olarak, bir dize açıkça veya örtük olarak sayısal bir değere dönüştürülebilir. Özellikle

  • Boş bir dize sıfır değerine dönüştürülür.
  • Baştaki ve sondaki boşluklar yoksayılır; ancak, bir dize yalnızca boşluklardan oluşamayabilir.
  • Yalnızca boşluk ve/veya satır sonlandırıcıları içeren bir dize sıfır değerine dönüştürülür.
  • Bir baştaki + veya - işaretine izin verilir.
  • Bir tamsayının onaltılık ön eki (0x veya 0X) olabilir.
  • İsteğe bağlı olarak işaretli bir üsse izin verilir.
  • Tip ekleri ve çarpanlara izin verilmemektedir.
  • "-Infinity", "Infinity" ve "NaN" büyük/küçük harfe özgü dizeler sırasıyla -∞, +∞ ve NaN değerleri olarak kabul edilir.

6.17 Parametre bağlaması sırasında dönüştürme

Parametre bağlama hakkında bilgi için bkz. §8.14.

bir ifadenin değeri bir parametreye bağlı olduğunda, aşağıda açıklandığı gibi ek dönüştürme konuları vardır:

  • Parametre türü switch ise (§4.2.5, §8.10.5) ve parametrenin bağımsız değişkeni yoksa, çağrılan komuttaki parametrenin değeri $trueolarak ayarlanır. Parametre türü switch dışındaysa, bağımsız değişkeni olmayan bir parametre hatalıdır.
  • Parametre türü switch ise ve bağımsız değişken değeri $nullise, parametre değeri $falseolarak ayarlanır.
  • Parametre türü nesneyse veya bağımsız değişkenin türüyle aynıysa, bağımsız değişkenin değeri dönüştürme olmadan geçirilir.
  • Parametre türü nesne veya betik bloğu değilse, scriptblock türüne sahip bir bağımsız değişken değerlendirilir ve sonucu bağımsız değişkenin değeri olarak geçirilir. (Bu, gecikmeli betik bloğu bağlamasıolarak bilinir.) Parametre türü nesne veya betik bloğu ise, betik bloğu türüne sahip bir bağımsız değişken olduğu gibi geçirilir.
  • Parametre türü T2 türünde bir koleksiyonsa ve bağımsız değişken T1 türünde bir skaler ise, bu skaler bir öğe içeren T2 türünde bir koleksiyona dönüştürülür. Gerekirse, skaler değer bu bölümün dönüştürme kuralları kullanılarak T2 türüne dönüştürülür.
  • Parametre türü nesne dışında bir skaler türse ve bağımsız değişken bir koleksiyonsa, bağımsız değişken hatalıdır.
  • Beklenen parametre türü T2 türünde bir koleksiyonsa ve bağımsız değişken T1 türünde bir koleksiyonsa, bağımsız değişken, bağımsız değişken koleksiyonuyla aynı uzunlukta olan T2 türünde bir koleksiyona dönüştürülür. Gerekirse, bağımsız değişken koleksiyonu öğesi değerleri bu bölümün dönüştürme kuralları kullanılarak T2 türüne dönüştürülür.
  • Yukarıdaki adımlar ve bu bölümde daha önce belirtilen dönüştürmeler yeterli değilse, §6.18 kuralları uygulanır. Bunlar başarısız olursa parametre bağlaması başarısız olur.

6.18 .NET Dönüştürme

Gizli dönüştürme için, önce PowerShell'in yerleşik dönüştürmeleri denenir. Dönüştürmeyi çözümleyemezlerse, aşağıdaki .NET özel dönüştürücüler yukarıdan aşağıya doğru sırayla denenecektir. Bir dönüştürme bulunursa ancak bir istisna fırlatırsa, dönüştürme başarısız olur.

  • PSTypeConverter: PSTypeConverter sınıfının uygulanmasını hedef sınıfıyla ilişkilendirmenin iki yolu vardır: tür yapılandırma dosyası (types.ps1xml) aracılığıyla veya System.ComponentModel.TypeConverterAttribute özniteliğini hedef sınıfa uygulayarak. Daha fazla bilgi için PowerShell SDK belgelerine bakın.

  • TypeConverter: Bu CLR türü, değer türlerini diğer türlere dönüştürmenin yanı sıra standart değerlere ve alt özelliklere erişmek için birleşik bir yol sağlar. En yaygın dönüştürücü türü, metin gösterimine ve bu gösterimden dönüştüren türdür. Bir sınıfın tür dönüştürücüsü System.ComponentModel.TypeConverterAttributeile sınıfa bağlanır. Bu öznitelik geçersiz kılınmadığı sürece, bu sınıftan devralan tüm sınıflar temel sınıfla aynı tür dönüştürücüsü kullanır. Daha fazla bilgi için PowerShell SDK'sına ve Microsoft .NET çerçevesi belgelerine bakın.

  • Ayrıştırma Yöntemi: Kaynak türü dizeyse ve hedef türün Parseadlı bir yöntemi varsa, dönüştürmeyi gerçekleştirmek için bu yöntem çağrılır.

  • Oluşturucular: Eğer hedef türün, türü kaynak türü olan tek bir bağımsız değişken alan bir oluşturucusu varsa, dönüştürmeyi gerçekleştirmek için bu oluşturucu çağrılır.

  • Örtük Atama İşleci: Kaynak türü hedef türe dönüştüren örtük bir atama işlecine sahipse, dönüştürmeyi gerçekleştirmek için bu işleç çağrılır.

  • Açık Atama İşleci: Kaynak türü hedef türe dönüştüren açık bir atama işlecine sahipse, dönüştürmeyi gerçekleştirmek için bu işleç çağrılır. Hedef türün kaynak türünden dönüştüren açık bir atama işleci varsa, dönüştürmeyi gerçekleştirmek için bu işleç çağrılır.

  • IConvertable: dönüştürmeyi gerçekleştirmek için System.Convert.ChangeType çağrılır.

6.19 Sıralıya dönüştürme

Herhangi bir değeri sıralı sahte türe dönüştürme kuralları aşağıdaki gibidir:

  • Değer bir karma değişmez değer ise (§2.3.5.6), sonuç, karma tablo gibi davranan uygulama tanımlı türe sahip bir nesnedir ve anahtarların sırası karma değişmez değerde belirtilen sırayla eşleşir.
  • Aksi takdirde, davranış uygulamaya bağlı olarak tanımlıdır.

Yalnızca karma değişmez değerleri (§2.3.5.6) sıralı hale getirilebilir. Sonuç, System.Collections.Specialized.OrderedDictionaryörneğidir.

6.20 Pscustomobject'e dönüştürme

Herhangi bir değeri sahte tür pscustomobject'e dönüştürme kuralları aşağıdaki gibidir:

  • Karma tablo türünde bir değer PowerShell nesnesine dönüştürülür. Karma tablodaki her anahtar, karşılık gelen değere sahip bir NoteProperty olur.
  • Aksi takdirde, davranış uygulamaya bağlı olarak tanımlıdır.

Dönüştürmeye her zaman izin verilir, ancak değerin türünü değiştirmez.