Pikirkan hal itu saat menjawab pertanyaan ini .
Bagaimana Anda bisa menghindari kebutuhan untuk sepenuhnya memenuhi syarat setiap jenis tunggal dalam namespace?
Sangat membosankan untuk menulis System.Security.Cryptography.X509Certificates.X509Store
alih-alih X509Store
, atau [System.Security.Cryptography.X509Certificates.StoreName]::My
alih-alih [StoreName]::My
.
Dalam C # Anda memiliki using
arahan ... bagaimana dengan Powershell?
EDIT 1 - Ini berfungsi untuk jenis:
$ns = "System.Security.Cryptography.X509Certificates"
$store = New-Object "$ns.X509Store"(StoreName,StoreLocation)
New-Object mengambil string literal sebagai definisi tipe, sehingga dapat dibangun secara terprogram.
EDIT 2 - Ini berfungsi untuk anggota penghitungan yang digunakan sebagai parameter:
$store = New-Object "$ns.X509Store"("My","LocalMachine")
Di mana "My" berada [System.Security.Cryptography.X509Certificates.StoreName]::My
dan "LocalMachine" adalah [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine
.
Nama literal secara otomatis dikonversi ke anggota pencacahan, jika ditempatkan di mana seorang anggota pencacahan diharapkan.
sumber
Jawaban:
Saya tahu, ini sedikit terlambat, tetapi PowerShell v5 menambahkan banyak hal bahasa keren. Salah satunya adalah 'menggunakan namespace'.
sumber
Untuk penghitungan, Anda tidak perlu menentukan nama tipe keseluruhan. Sebagai contoh:
Kamu bisa melakukan ini:
atau versi yang jauh lebih sederhana:
Anda dapat menggunakan string untuk mengidentifikasi enumerasi yang ingin Anda gunakan tanpa harus menggunakan nama yang sepenuhnya didekorasi. PowerShell menangani pengetikan bagi Anda untuk mengonversi string ke nilai enumerasi. Menggunakan contoh spesifik yang Anda tunjukkan di atas, itu artinya Anda bisa melakukan ini:
Dan Powershell akan mengubahnya dengan benar (jadi meneruskan 'ReadWrite' ke parameter yang mengambil nilai enumerasi OpenFlags akan berfungsi dengan baik). Jika Anda ingin memberikan beberapa nilai, Anda dapat melakukannya seperti ini:
Perhatikan bahwa saya mengawali perintah-perintah ini dengan nama ketik, tetapi jika Anda meneruskannya ke parameter yang diketik Anda hanya akan meninggalkan itu.
Itu seharusnya membuat Anda selangkah lebih dekat untuk bisa menulis skrip yang bekerja dengan namespace tertentu tanpa harus mendekorasi semua nama.
sumber
Jalan yang benar?
Dan ini sepertinya berhasil:
Tapi itu jelek ketika Anda melakukan ini:
sumber