about_Types.ps1xml

Deskripsi singkat

Menjelaskan cara menggunakan Types.ps1xml file untuk memperluas jenis objek yang digunakan di PowerShell.

Deskripsi panjang

Data jenis yang diperluas menentukan properti dan metode tambahan ("anggota") dari jenis objek di PowerShell. Ada dua teknik untuk menambahkan data jenis yang diperluas ke sesi PowerShell.

  • Types.ps1xml file: File XML yang menentukan data jenis yang diperluas.
  • Update-TypeData: Cmdlet yang memuat Types.ps1xml ulang file dan menentukan data yang diperluas untuk jenis dalam sesi saat ini.

Topik ini menjelaskan Types.ps1xml file. Untuk informasi selengkapnya tentang menggunakan Update-TypeData cmdlet untuk menambahkan data tipe yang diperluas dinamis ke sesi saat ini lihat Update-TypeData.

Tentang data jenis yang diperluas

Data jenis yang diperluas menentukan properti dan metode tambahan ("anggota") dari jenis objek di PowerShell. Anda dapat memperluas jenis apa pun yang didukung oleh PowerShell dan menggunakan properti dan metode yang ditambahkan dengan cara yang sama seperti Anda menggunakan properti yang ditentukan pada jenis objek.

Misalnya, PowerShell menambahkan properti DateTime ke semua System.DateTime objek, seperti Get-Date yang dikembalikan cmdlet.

(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM

Anda tidak akan menemukan properti DateTime dalam deskripsi struktur System.DateTime , karena PowerShell menambahkan properti dan hanya terlihat di PowerShell.

PowerShell secara internal mendefinisikan sekumpulan jenis yang diperluas secara default. Informasi jenis ini dimuat di setiap sesi PowerShell saat startup. Properti DateTime adalah bagian dari set default ini. Sebelum PowerShell 6, definisi jenis disimpan Types.ps1xml file di direktori penginstalan PowerShell ($PSHOME).

Menambahkan data tipe yang diperluas ke PowerShell

Ada tiga sumber data jenis yang diperluas dalam sesi PowerShell.

  • Data jenis yang diperluas ditentukan oleh PowerShell dan dimuat secara otomatis ke setiap sesi PowerShell. Dimulai dengan PowerShell 6, informasi ini dikompilasi ke dalam PowerShell dan tidak lagi dikirim dalam Types.ps1xml file.

  • File Types.ps1xml yang diekspor modul dimuat ketika modul diimpor ke sesi saat ini.

  • Data jenis yang diperluas yang ditentukan dengan menggunakan Update-TypeData cmdlet ditambahkan hanya ke sesi saat ini. Ini tidak disimpan dalam file.

Dalam sesi, data jenis yang diperluas dari tiga sumber diterapkan ke objek dengan cara yang sama dan tersedia pada semua objek dari jenis yang ditentukan.

Cmdlet TypeData

Cmdlet berikut disertakan dalam modul Microsoft.PowerShell.Utility di PowerShell 3.0 dan yang lebih baru.

  • Get-TypeData: Mendapatkan data jenis yang diperluas dalam sesi saat ini.
  • Update-TypeData: Memuat ulang Types.ps1xml file. Menambahkan data tipe yang diperluas ke sesi saat ini.
  • Remove-TypeData: Menghapus data jenis yang diperluas dari sesi saat ini.

Untuk informasi selengkapnya tentang cmdlet ini, lihat topik bantuan untuk setiap cmdlet.

File Type.ps1xml bawaan

File Types.ps1xml dalam $PSHOME direktori ditambahkan secara otomatis ke setiap sesi.

File Types.ps1xml di direktori penginstalan PowerShell ($PSHOME) adalah file teks berbasis XML yang memungkinkan Anda menambahkan properti dan metode ke objek yang digunakan di PowerShell. PowerShell memiliki file bawaan Types.ps1xml yang menambahkan beberapa elemen ke jenis .NET, tetapi Anda dapat membuat file tambahan Types.ps1xml untuk memperluas jenis lebih lanjut.

Misalnya, secara default, objek array (System.Array) memiliki properti Panjang yang mencantumkan jumlah objek dalam array. Namun, karena nama Panjang tidak menjelaskan properti dengan jelas, PowerShell menambahkan properti alias bernama Count yang menampilkan nilai yang sama. XML berikut menambahkan properti Hitung ke System.Array jenis .

<Type>
  <Name>System.Array</Name>
  <Members>
    <AliasProperty>
      <Name>Count</Name>
      <ReferencedMemberName>
        Length
      </ReferencedMemberName>
    </AliasProperty>
  </Members>
</Type>

Untuk mendapatkan AliasProperty baru, gunakan Get-Member perintah pada array apa pun, seperti yang ditunjukkan dalam contoh berikut.

Get-Member -InputObject (1,2,3,4)

Perintah mengembalikan hasil berikut.

Name       MemberType    Definition
----       ----------    ----------
Count      AliasProperty Count = Length
Address    Method        System.Object& Address(Int32)
Clone      Method        System.Object Clone()
CopyTo     Method        System.Void CopyTo(Array array, Int32 index):
Equals     Method        System.Boolean Equals(Object obj)
Get        Method        System.Object Get(Int32)
# ...

Akibatnya, Anda dapat menggunakan properti Hitung atau properti Panjang array di PowerShell. Contohnya:

(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4

Membuat file Type.ps1xml baru

File .ps1xml yang diinstal dengan PowerShell ditandatangani secara digital untuk mencegah perubahan karena pemformatan dapat menyertakan blok skrip. Oleh karena itu, untuk menambahkan properti atau metode ke jenis .NET, buat file Anda sendiri Types.ps1xml , lalu tambahkan ke sesi PowerShell Anda.

Untuk membuat file baru, mulailah dengan menyalin file yang sudah ada Types.ps1xml . File baru dapat memiliki nama apa pun, tetapi harus memiliki .ps1xml ekstensi nama file. Anda dapat menempatkan file baru di direktori apa pun yang dapat diakses oleh PowerShell, tetapi berguna untuk menempatkan file di direktori penginstalan PowerShell ($PSHOME) atau di subdirektori direktori penginstalan.

Ketika Anda telah menyimpan file baru, gunakan Update-TypeData cmdlet untuk menambahkan file baru ke sesi PowerShell Anda. Jika Anda ingin jenis Anda lebih diutamakan daripada jenis bawaan yang ditentukan, gunakan parameter PrependData cmdlet Update-TypeData . Update-TypeData hanya memengaruhi sesi saat ini. Untuk membuat perubahan pada semua sesi mendatang, ekspor konsol, atau tambahkan Update-TypeData perintah ke profil PowerShell Anda.

Type.ps1xml dan Add-Member

File Types.ps1xml menambahkan properti dan metode ke semua instans objek dari jenis .NET yang ditentukan dalam sesi PowerShell yang terpengaruh. Namun, jika Anda perlu menambahkan properti atau metode hanya ke satu instans objek, gunakan Add-Member cmdlet .

Untuk informasi selengkapnya, lihat Add-Member.

Contoh: Menambahkan anggota Usia ke objek FileInfo

Contoh ini menunjukkan cara menambahkan properti Usia ke objek System.IO.FileInfo . Usia file adalah perbedaan antara waktu pembuatannya dan waktu saat ini dalam hari.

Karena properti Usia dihitung dengan menggunakan blok skrip, temukan tag yang <ScriptProperty> akan digunakan sebagai model untuk properti Usia baru.

Simpan kode XML berikut ke file $PSHOME\MyTypes.ps1xml.

<?xml version="1.0" encoding="utf-8" ?>
<Types>
  <Type>
    <Name>System.IO.FileInfo</Name>
    <Members>
      <ScriptProperty>
        <Name>Age</Name>
        <GetScriptBlock>
          ((Get-Date) - ($this.CreationTime)).Days
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
</Types>

Jalankan Update-TypeData untuk menambahkan file baru Types.ps1xml ke sesi saat ini. Perintah menggunakan parameter PrependData untuk menempatkan file baru dalam urutan prioritas yang lebih tinggi dari definisi asli.

Untuk informasi selengkapnya tentang Update-TypeData, lihat Update-TypeData.

Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml

Untuk menguji perubahan, jalankan Get-ChildItem perintah untuk mendapatkan file PowerShell.exe di $PSHOME direktori, lalu pipa file ke Format-List cmdlet untuk mencantumkan semua properti file. Akibat perubahan tersebut, properti Usia muncul dalam daftar.

Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age
142

XML dalam file Type.ps1xml

Definisi skema lengkap dapat ditemukan di Type.xsd di repositori kode sumber PowerShell di GitHub.

Tag <Types> menyertakan semua jenis yang ditentukan dalam file. Seharusnya hanya ada satu <Types> tag.

Setiap jenis .NET yang disebutkan dalam file harus diwakili oleh <Type> tag.

Tag jenis harus berisi tag berikut:

<Name>: Menyertakan nama jenis .NET yang terpengaruh.

<Members>: Menyertakan tag untuk properti dan metode baru yang ditentukan untuk jenis .NET.

Salah satu tag anggota berikut dapat berada di <Members> dalam tag.

AliasProperty

Menentukan nama baru untuk properti yang sudah ada.

Tag <AliasProperty> harus memiliki <Name> tag yang menentukan nama properti baru dan <ReferencedMemberName> tag yang menentukan properti yang sudah ada.

Misalnya, properti Alias hitung adalah alias untuk properti Panjang objek array.

<Type>
  <Name>System.Array</Name>
  <Members>
    <AliasProperty>
      <Name>Count</Name>
      <ReferencedMemberName>Length</ReferencedMemberName>
    </AliasProperty>
  </Members>
</Type>

CodeMethod

Mereferensikan metode statis dari kelas .NET.

Tag <CodeMethod> harus memiliki <Name> tag yang menentukan nama metode baru dan <CodeReference> tag yang menentukan kode tempat metode ditentukan.

Misalnya, metode ToString adalah nama definisi kode Microsoft.PowerShell.ToStringCodeMethods .

  <Type>
    <Name>System.Xml.XmlNode</Name>
    <Members>
      <CodeMethod>
        <Name>ToString</Name>
        <CodeReference>
          <TypeName>Microsoft.PowerShell.ToStringCodeMethods</TypeName>
          <MethodName>XmlNode</MethodName>
        </CodeReference>
      </CodeMethod>
    </Members>
  </Type>

CodeProperty

Mereferensikan metode statis dari kelas .NET.

Tag <CodeProperty> harus memiliki <Name> tag yang menentukan nama properti baru dan <GetCodeReference> tag yang menentukan kode tempat properti ditentukan.

Misalnya, properti System.IO.DirectoryInfo Mode objek adalah properti kode yang ditentukan dalam penyedia FileSystem PowerShell.

<Type>
  <Name>System.IO.DirectoryInfo</Name>
  <Members>
    <CodeProperty>
      <Name>Mode</Name>
      <GetCodeReference>
        <TypeName>
          Microsoft.PowerShell.Commands.FileSystemProvider
        </TypeName>
        <MethodName>Mode</MethodName>
      </GetCodeReference>
    </CodeProperty>
  </Members>
</Type>

Set Anggota

Menentukan kumpulan anggota (properti dan metode).

Tag <MemberSet> muncul dalam tag utama <Members> . Tag harus mengapit tag yang <Name> mengelilingi nama set anggota dan tag sekunder <Members> yang mengelilingi anggota (properti dan metode) dalam set. Salah satu tag yang membuat properti (seperti <NoteProperty> atau <ScriptProperty>) atau metode (seperti <Method> atau <ScriptMethod>) dapat menjadi anggota set.

Dalam Types.ps1xml file, <MemberSet> tag digunakan untuk menentukan tampilan default objek .NET di PowerShell. Dalam hal ini, nama kumpulan anggota (nilai dalam <Name> tag) selalu PsStandardMembers, dan nama properti (nilai <Name> tag) adalah salah satu dari berikut ini:

  • DefaultDisplayProperty: Satu properti objek.

  • DefaultDisplayPropertySet: Satu atau beberapa properti objek.

  • DefaultKeyPropertySet: Satu atau beberapa properti kunci objek. Properti kunci mengidentifikasi instans nilai properti, seperti jumlah ID item dalam riwayat sesi.

Misalnya, XML berikut menentukan tampilan default layanan (System.ServiceProcess.ServiceController objek) yang dikembalikan oleh Get-Service cmdlet. Ini mendefinisikan kumpulan anggota bernama PsStandardMembers yang terdiri dari properti default yang diatur dengan properti Status, Nama, dan DisplayName .

<Type>
  <Name>System.ServiceProcess.ServiceController</Name>
  <Members>
    <MemberSet>
      <Name>PSStandardMembers</Name>
      <Members>
        <PropertySet>
          <Name>DefaultDisplayPropertySet</Name>
          <ReferencedProperties>
            <Name>Status</Name>
            <Name>Name</Name>
            <Name>DisplayName</Name>
          </ReferencedProperties>
        </PropertySet>
      </Members>
    </MemberSet>
  </Members>
</Type>

<Method>: Mereferensikan metode asli dari objek yang mendasar.

<Methods>: Kumpulan metode objek.

NoteProperty

Menentukan properti dengan nilai statis.

Tag <NoteProperty> harus memiliki <Name> tag yang menentukan nama properti baru dan <Value> tag yang menentukan nilai properti.

Misalnya, XML berikut membuat properti Status untuk objek System.IO.DirectoryInfo . Nilai properti Status selalu Berhasil.

<Type>
  <Name>System.IO.DirectoryInfo</Name>
  <Members>
    <NoteProperty>
      <Name>Status</Name>
      <Value>Success</Value>
    </NoteProperty>
  </Members>
</Type>

PropertiSet

Properti yang mengambil argumen dan mengembalikan nilai.

<Properties>: Kumpulan properti objek.

<Property>: Properti objek dasar.

<PropertySet>: Mendefinisikan kumpulan properti objek.

Tag <PropertySet> harus memiliki <Name> tag yang menentukan nama kumpulan properti dan <ReferencedProperty> tag yang menentukan properti. Nama properti diapit dalam <Name> tag.

Di Types.ps1xml, <PropertySet> tag digunakan untuk menentukan kumpulan properti untuk tampilan default objek. Anda dapat mengidentifikasi tampilan default berdasarkan nilai PsStandardMembers dalam <Name> tag <MemberSet> tag.

Misalnya, XML berikut membuat PropertySet bernama DefaultDisplayPropertySet dengan tiga ReferencedProperties.

<Type>
  <Name>System.ServiceProcess.ServiceController</Name>
  <Members>
    <MemberSet>
      <Name>PSStandardMembers</Name>
      <Members>
        <PropertySet>
          <Name>DefaultDisplayPropertySet</Name>
          <ReferencedProperties>
            <Name>Status</Name>
            <Name>Name</Name>
            <Name>DisplayName</Name>
          </ReferencedProperties>
        </PropertySet>
      </Members>
    </MemberSet>
  </Members>
</Type>

ScriptMethod

Mendefinisikan metode yang nilainya adalah output dari skrip.

Tag <ScriptMethod> harus memiliki <Name> tag yang menentukan nama metode baru dan <Script> tag yang menyertakan blok skrip yang mengembalikan hasil metode.

Misalnya, ConvertToDateTime metode dan ConvertFromDateTime objek manajemen (System.System.Management.ManagementObject) adalah metode skrip yang menggunakan ToDateTime metode statis dan ToDmtfDateTime kelas System.Management.ManagementDateTimeConverter .

<Type>
 <Name>System.Management.ManagementObject</Name>
 <Members>
 <ScriptMethod>
   <Name>ConvertToDateTime</Name>
   <Script>
   [System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
   </Script>
 </ScriptMethod>
 <ScriptMethod>
   <Name>ConvertFromDateTime</Name>
   <Script>
   [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
   </Script>
 </ScriptMethod>
 </Members>
</Type>

ScriptProperty

Menentukan properti yang nilainya adalah output dari skrip.

Tag <ScriptProperty> harus memiliki <Name> tag yang menentukan nama properti baru dan <GetScriptBlock> tag yang menyertakan blok skrip yang mengembalikan nilai properti.

Misalnya, properti VersionInfo dari objek System.IO.FileInfo adalah properti skrip yang dihasilkan dari menggunakan properti FullName dari metode statis GetVersionInfo objek System.Diagnostics.FileVersionInfo .

<Type>
  <Name>System.IO.FileInfo</Name>
  <Members>
    <ScriptProperty>
      <Name>VersionInfo</Name>
      <GetScriptBlock>
      [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
      </GetScriptBlock>
    </ScriptProperty>
  </Members>
</Type>

Untuk informasi selengkapnya, lihat Kit Pengembangan Perangkat Lunak (SDK) Windows PowerShell.

Update-TypeData

Untuk memuat file Anda Types.ps1xml ke dalam sesi PowerShell, jalankan Update-TypeData cmdlet. Jika Anda ingin jenis dalam file Anda lebih diutamakan daripada jenis dalam file bawaan Types.ps1xml , tambahkan parameter PrependData dari Update-TypeData. Update-TypeData hanya memengaruhi sesi saat ini. Untuk membuat perubahan pada semua sesi mendatang, ekspor sesi, atau tambahkan Update-TypeData perintah ke profil PowerShell Anda.

Pengecualian yang terjadi di properti, atau dari menambahkan properti ke Update-TypeData perintah, jangan laporkan kesalahan ke StdErr. Ini untuk menekan pengecualian yang akan terjadi dalam banyak jenis umum selama pemformatan dan output. Jika Anda mendapatkan properti .NET, Anda dapat mengatasi penekanan pengecualian dengan menggunakan sintaks metode sebagai gantinya, seperti yang ditunjukkan dalam contoh berikut:

"hello".get_Length()

Perhatikan bahwa sintaks metode hanya dapat digunakan dengan properti .NET. Properti yang ditambahkan dengan menjalankan Update-TypeData cmdlet tidak dapat menggunakan sintaks metode.

Menandatangani file Type.ps1xml

Untuk melindungi pengguna Types.ps1xml file, Anda dapat menandatangani file menggunakan tanda tangan digital. Untuk informasi selengkapnya, lihat about_Signing.

Lihat juga