Pertanyaan Bagaimana mengolok-olok atribut PowerShell V3 di V2


Menjadi orang yang suka mendokumentasikan secara menyeluruh, saya senang untuk menemukan SupportsWildcards atribut, antara lain, ditambahkan dalam PowerShell V3. Saya telah menghias parameter di perpustakaan saya dengan atribut yang sesuai. Dalam jangka panjang tidak ada masalah, tetapi dalam jangka pendek masih banyak orang menggunakan V2 karena berbagai alasan (termasuk saya dalam satu lingkungan).

Tampaknya konyol bahwa hanya karena satu atribut, beberapa fungsi saya tidak lagi dapat berjalan di PowerShell V2. Jadi saya mencari cara untuk mengejek atribut di V2 untuk mengubahnya menjadi "no-op".

Solusinya, seperti yang saya lihat, membutuhkan dua bagian:

  1. membuat atribut khusus yang pada dasarnya kosong.
  2. buat ini berlaku di V2 tetapi diabaikan dalam V3 (dan karenanya biarkan atribut V3 yang benar berfungsi dengan benar).

Saya mencari panduan di kedua bagian, karena tidak bermain dengan atribut khusus sebelumnya.


25
2018-03-01 16:15


asal


Jawaban:


Mungkin Anda bisa mencoba ini.

    Add-Type @"    
        public class CustomAttribute : System.Attribute
        {
           public bool SupportSomething { get; set; } 
        }
    "@

    function Do-Something {
        param(
            [CustomAttribute(SupportSomething=$true)]
            $Command
        )
    }

    $parameters = Get-Command -Name Do-Something | Select-Object -ExpandProperty Parameters
    $parameters["Command"].Attributes

Kemudian hasilnya:

    SupportSomething : True
    TypeId           : CustomAttribute

Kami pertama mendefinisikan atribut di C #, yang juga dapat Anda lakukan di PowerShell. Tambahkan atribut ke parameter. Kemudian dapatkan daftar atribut. Lihat sini untuk lebih banyak contoh atribut


2
2018-03-22 14:22