- terminal.Gui memungkinkan Anda membuat antarmuka TUI tingkat lanjut di PowerShell, dengan menu, dialog, dan tabel dalam mode teks.
- Modul yang dirancang dengan baik dapat menyertakan biner untuk .NET Core dan .NET Framework dan memuatnya secara dinamis berdasarkan versi PowerShell.
- Fitur-fitur seperti ConvertTo-DataTable, RefreshTable, atau ShowWhatIf memudahkan pembuatan aplikasi TUI yang lengkap dan aman.
- Dengan pola-pola ini, solusi TUI yang sama dapat dijalankan di kedua lingkungan tersebut. Windows PowerShell seperti pada PowerShell 7 tanpa perubahan pada logika utamanya.
Jika Anda bekerja dengan skrip dan otomatisasi setiap hari, cepat atau lambat Anda akan ingin beralih dari konsol hitam putih yang biasa. Membuat menu TUI (Text User Interface) di PowerShell dengan pustaka Terminal.Gui. Ini memungkinkan Anda untuk mengatur antarmuka "mirip aplikasi" langsung di terminal, dengan kotak dialog, tabel, formulir, dan bahkan jendela modal, tanpa perlu menggunakan WinForms atau WPF.
Dalam artikel ini Anda akan melihat, secara rinci, bagaimana Membawa antarmuka TUI ini ke PowerShell 7 dan Windows PowerShell klasik.Kita akan membahas cara memuat biner dengan benar berdasarkan versinya dan cara memanfaatkan kontrol tingkat lanjut seperti dialog kredensial, tabel, dan kotak pesan. Kita juga akan meninjau serangkaian fungsi contoh untuk mengelola data dari TUI, yang akan berfungsi sebagai templat untuk proyek Anda sendiri.
Apa itu Terminal.Gui (gui.cs) dan mengapa menggunakannya dengan PowerShell?
Terminal.Gui, juga dikenal sebagai gui.cs adalah kerangka kerja .NET untuk membuat antarmuka teks. yang berjalan di konsol. Ini tidak menampilkan jendela grafis "klasik", melainkan antarmuka mode teks, namun dengan menu, tombol, kotak teks, tabel, dialog konfirmasi, dll., semuanya dapat dinavigasi dengan sempurna menggunakan keyboard.
Secara default, pustaka tersebut hanya dikompilasi untuk .NET Core, yang kompatibel dengan PowerShell 7Ini tidak termasuk Windows PowerShell (versi 5.1 dan sebelumnya), yang menggunakan .NET Framework klasik. Akibatnya, banyak contoh yang Anda lihat secara online hanya berfungsi di PowerShell 7 dan gagal di konsol Windows tradisional.
Kuncinya adalah itu Tidak ada batasan teknis nyata yang mencegah penggunaan Terminal.Gui di Windows PowerShell.Masalahnya semata-mata terletak pada kompilasi: biner resmi dihasilkan untuk .NET Core, tetapi basis kode yang sama juga dapat dikompilasi untuk .NET Framework tanpa perubahan signifikan.
Untuk mengisi celah ini, dapat dibuat sebuah modul yang mencakup Tersedia dua versi assembly Terminal.Gui: satu untuk .NET Core dan satu untuk .NET Framework.Modul TuiCredential adalah contoh sempurna dari pendekatan ini, karena modul ini merangkum semua pekerjaan kompilasi dan pemuatan DLL secara dinamis sehingga Anda hanya perlu memanggil sebuah cmdlet.

Cara mengaktifkan TUI di PowerShell 7 dan Windows PowerShell
Agar Terminal.Gui tersedia di Windows PowerShell dan PowerShell 7, Anda perlu melakukan hal berikut: sekumpulan file biner untuk setiap runtime.Artinya, satu assembly dikompilasi terhadap .NET Framework dan assembly lainnya terhadap .NET Core. Modul TuiCredential mengemas keduanya dalam struktur foldernya.
Setelah Anda menerbitkan modul (atau mengunduhnya dari PowerShell Gallery), prosesnya adalah... Instalasinya sangat sederhana.Cukup gunakan cmdlet resmi untuk modul:
Install-Module -Name TuiCredential -Scope CurrentUser
Perintah ini dapat dieksekusi. baik di Windows PowerShell maupun di PowerShell 7Keajaiban terletak pada kenyataan bahwa modul tersebut berisi DLL yang sesuai dan sebuah naskah Proses inisialisasi menentukan versi mana yang akan dimuat berdasarkan versi yang sedang Anda gunakan. Dengan cara ini, kode TUI yang sama dapat berfungsi di kedua platform tanpa Anda perlu menduplikasi logika.
Inti utama dari modul ini adalah sebuah berkas yang berisi... boot (misalnya, init.ps1) yang, ketika modul diimpor, bertanggung jawab untuk Mendeteksi versi PowerShell dan memuat assembly Terminal.Gui yang benar. Dengan menggunakan Add-Type, semua tipe dan kelas akan tersedia untuk fungsi-fungsi lain dalam modul tersebut.
Pemuatan biner bersyarat dengan init.ps1
Saat Anda memeriksa struktur file modul, Anda akan melihat dua subfolder berisi file biner, biasanya seperti ini: Binaries (untuk .NET Framework) dan BinariesPs7 (untuk .NET Core)Keduanya berisi versi Terminal.Gui.dll yang berbeda, yang disesuaikan untuk masing-masing runtime.
Di dalam modul tersebut, skrip init.ps1 melakukan pemeriksaan yang sangat sederhana dengan $PSVersionTable.PSVersion.Major Untuk menentukan lokasi Anda, jika versi utama kurang dari atau sama dengan 5, anggap Anda bekerja di Windows PowerShell dan siapkan jalur ke folder biner .NET Framework; jika tidak, arahkan ke folder untuk PowerShell 7 dan .NET Core.
Pola dasarnya adalah membangun rute menggunakan Gabungkan jalur dengan $PSScriptRootDengan cara ini, modul selalu menemukan DLL-nya terlepas dari tempat instalasinya. Kemudian, nama assembly, seperti Terminal.Gui.dll, digabungkan, dan Add-Type -Path dipanggil untuk memuat tipe tersebut ke dalam sesi.
Selain itu, skrip tersebut dapat menulis pesan dengan Gunakan Write-Verbose untuk menunjukkan apakah Anda memuat biner .NET Framework atau .NET Core.Ini sangat berguna saat melakukan debugging masalah kompatibilitas, versi assembly, atau konflik dependensi.
Berkat mekanisme pemuatan sesuai permintaan ini, semua kode TUI yang ditulis setelah impor Hal ini didasarkan pada kepastian bahwa tipe Terminal.Gui sudah tersedia dan kompatibel dengan versi PowerShell yang digunakan.Hal ini menghindari keharusan menulis logika duplikat atau kondisional di setiap fungsi.
Dialog Kredensial TUI dengan TuiCredential
Setelah Anda menginstal modul TuiCredential dan memuat biner secara transparan, cara paling mudah untuk memanfaatkannya adalah melalui cmdlet. Tampilkan-DialogKredensial, yang menampilkan kotak dialog TUI untuk meminta nama pengguna dan kata sandi di dalam terminal.
Panggilan paling dasar Begini caranya:
Show-CredentialDialog
Saat Anda menjalankannya, sebuah jendela tipe dialog, dalam mode teks, yang meminta kredensialKolom nama pengguna sudah terisi dengan pengguna sesi saat ini; Anda hanya perlu memasukkan kata sandi dan menekan ENTER. Cmdlet ini mengembalikan objek PSCredential yang dapat Anda gunakan apa adanya untuk otentikasi dalam koneksi lain, cmdlet jarak jauh, dan akses ke... database atau sistem lain apa pun yang memerlukan kredensial aman.
Dialog tersebut dapat dikonfigurasi melalui parameter.Sebagai contoh, jika Anda ingin mengubah judul jendela, mengatur nama pengguna tertentu, dan menambahkan tombol untuk mengaktifkan/menonaktifkan penyembunyian kata sandi, Anda dapat menggunakan sesuatu seperti:
Show-CredentialDialog -Title 'Log on to File Server 12' -UserName serviceaccount1 -AllowToggle
Dengan varian ini Anda mendapatkan dialog yang lebih sesuai dengan konteks naskah AndaIni ideal ketika Anda perlu meminta kredensial untuk layanan tertentu (misalnya, akun layanan server file) daripada selalu menggunakan pengguna yang sedang masuk.
Sekilas tentang antarmuka TUI lainnya di PowerShell.
Di luar dialog kredensial, Terminal.Gui memungkinkan pemasangan. Aplikasi konsol lengkap dengan menu, formulir, tabel, dan bilah status.Contoh praktisnya adalah "item kerja" atau pengelola tugas, yang dibangun di atas basis data SQLite dan dikendalikan dari PowerShell, yang menggunakan serangkaian fungsi untuk memperbarui formulir, menampilkan bantuan, membuka basis data, atau menangani konfirmasi tindakan.
Dalam jenis aplikasi ini, hal yang umum ditemukan adalah... fungsi tambahan untuk membersihkan dan mengatur ulang formulir, memperbarui status bilah bawah, menampilkan kotak pesan dengan operasi tipe WhatIf, atau bahkan membuka dialog pemilihan file dengan OpenDialog.
Fungsi utilitas juga umum digunakan untuk Mengonversi koleksi objek PowerShell menjadi DataTablessehingga dapat dengan mudah dihubungkan ke kontrol TableView Terminal.Gui. Ini sangat penting untuk menampilkan daftar data dengan kolom, memungkinkan pemilihan baris, dan menavigasi catatan di dalam TUI.
Pendekatan "aplikasi mini" berbasis teks ini sangat menarik ketika Anda ingin Gantikan GUI WinForms yang rumit dengan solusi yang lebih ringan, lebih portabel, dan lebih ramah keyboard., dengan tetap menjalankan semua logika bisnis di PowerShell dan .NET.
Konversi data PowerShell ke DataTable untuk TableView.
Fungsi itu ConvertTo-DataTable adalah bagian fundamental ketika Anda ingin mengisi kontrol TableView. menggunakan data yang diperoleh dari cmdlet PowerShell. Idenya adalah mengambil objek generik, membangun System.Data.DataTable darinya, dan mengembalikannya sebagai hasilnya.
Fungsi ini biasanya dideklarasikan dengan CmdletBinding, OutputType, dan parameter yang menerima input pipa.Pada blok Begin, daftar objek generik dan DataTable baru yang disebut, misalnya, PSData disiapkan. Saat elemen diterima di blok Process, elemen tersebut ditambahkan ke daftar.
Pada akhirnya, di blok Akhir, fungsi tersebut Periksa properti objek pertama untuk menentukan kolom-kolom DataTable.Untuk setiap properti, sebuah kolom dibuat dengan nama dan tipe data yang sesuai. Kemudian, daftar objek diulang untuk membangun baris: setiap properti ditugaskan ke kolom yang sesuai, dan baris tersebut ditambahkan ke tabel.
Trik sederhana PowerShell memungkinkan Anda untuk mengembalikan DataTable sebagai satu-satunya hasil, bukan baris, menggunakan sintaks koma sebelum objek (, $table). Ini memastikan bahwa nilai yang dikembalikan adalah DataTable itu sendiri, siap untuk diikat ke TableView.Table nanti.
Untuk membantu proses debugging, fungsi ini dapat menulis pesan dengan Write-Verbose yang menunjukkan Berapa banyak elemen yang telah ditambahkan dan kolom mana yang sedang didefinisikan?Ini akan sangat berguna ketika skema data berubah atau ketika terjadi kesalahan saat mencoba menampilkan tabel di layar.
Manajemen formulir TUI: hapus, atur ulang, dan isi kolom.
Saat membangun antarmuka TUI dengan banyak kotak teks, daftar tarik-turun, kotak centang, dan label, sangat praktis untuk mengelompokkan logika pemeliharaan formulir ke dalam fungsi khusus seperti ClearForm, ResetForm atau PopulateDengan cara ini Anda menghindari duplikasi kode di mana-mana.
Fungsi ClearForm biasanya menangani Kosongkan kolom input utama (nama, deskripsi, progres, tanggal)Hapus centang pada kotak seperti WhatIf, kembalikan nilai default (misalnya, 30 hari), dan atur ulang bilah status untuk menampilkan tanggal saat ini dan teks "Siap." Terakhir, kembalikan fokus ke bidang pertama dan paksa Application.Refresh untuk menggambar ulang antarmuka.
ResetForm melangkah lebih jauh: selain membersihkan kolom, fungsi ini juga Mengembalikan jalur saat ini ke basis data kerja, mengatur ulang filter tabel. (misalnya, kotak centang untuk mengaktifkan atau menonaktifkan pemfilteran) dan memanggil fungsi-fungsi seperti RefreshCategoryList dan RefreshTable untuk membangun kembali daftar utama di layar.
Sebaliknya, fungsi Populate mengambil baris yang dipilih di TableView dan Isilah formulir dengan detail barang tersebut.Nama tugas, deskripsi, tanggal jatuh tempo, kategori, dan progres. Tergantung apakah tugas tersebut sudah lewat batas waktu, sesuaikan visibilitas label peringatan (Lewat Batas Waktu), dan Anda juga dapat menampilkan atau menyembunyikan kotak centang yang memungkinkan Anda untuk menghapus deskripsi dengan cepat.
Proses ini juga menyesuaikan pemilihan daftar kategori, menemukan indeks yang sesuai dalam daftar pendukung (misalnya, List[string] dengan semua kategori) dan menetapkannya ke DropDown yang sesuai.Dengan cara ini, formulir tersebut secara konsisten mencerminkan informasi dari rekam medis aktif.
Perbarui tabel dan daftar kategori di antarmuka.
Dalam aplikasi TUI yang berbasis Terminal.Gui, sangat penting untuk memiliki mekanisme untuk memperbarui konten tabel dan daftar tarik-turun secara dinamisDi sinilah fungsi-fungsi seperti RefreshTable dan RefreshCategoryList berperan, bekerja sama dengan cmdlet khusus yang melakukan query ke database.
RefreshTable seringkali secara opsional menerima kategori filter. Mulailah dengan membersihkan kontrol TableView menggunakan Gunakan RemoveAll dan Clear untuk menghapus semua jejak data lama.Selanjutnya, ia memanggil cmdlet bertipe Get-PSWorkItem -Path -Pilih semua dan terapkan Where-Object untuk memfilter berdasarkan kategori yang diinginkan, dengan memilih kolom yang relevan (ID, Nama, Deskripsi, Tanggal Jatuh Tempo, Kemajuan, Kategori, Terlambat).
Alur objek ini dilewatkan melalui fungsi ConvertTo-DataTable, yang mengembalikan DataTable yang siap untuk diikat. Hasilnya ditetapkan ke TableView.Table, yang menentukan sumber data tabel.Untuk melengkapi pengalaman tersebut, gaya kolom disesuaikan menggunakan TableView.Style.ColumnStyles.Add, yang mengontrol perataan (misalnya, Kanan untuk ID atau Kemajuan, Rata Kiri-Kanan untuk Tanggal Jatuh Tempo) dan lebar minimum.
Setelah gaya dikonfigurasi, panggilan dilakukan ke SetNeedsDisplay agar controller diperbarui dengan informasi baru.Dengan menjalankan RefreshTable lagi setelah membuat, memodifikasi, atau menghapus tugas, pengguna akan langsung melihat status yang diperbarui tanpa harus memulai ulang aplikasi TUI.
RefreshCategoryList, di sisi lain, menanyakan kategori pekerjaan menggunakan cmdlet seperti Get-PSWorkItemCategory -Path. Dari output tersebut, properti Kategori diekstrak, diurutkan, dan diteruskan ke SetSource dari kontrol dropdown (Dropdown atau Daftar, tergantung pada desainnya). Selain itu, dibuat daftar string generik yang berfungsi sebagai tabel pencarian untuk menemukan indeks kategori tertentu dengan cepat.
Selain itu, umum juga untuk membuat laporan ringkasan kecil dengan Get-PSWorkItemReport, memformatnya dengan Format-Table Category, Count, PctTotal dan Output-String. Teks yang dihasilkan kemudian ditetapkan ke label di antarmuka., menawarkan gambaran sekilas tentang berapa banyak tugas per kategori dan berapa persentase yang diwakili oleh tugas-tugas tersebut dari total keseluruhan.
Dialog bantuan, informasi, dan pemilihan basis data
Untuk melengkapi kegunaan TUI di PowerShell, disarankan untuk menambahkan dialog tambahan untuk menampilkan bantuan, informasi aplikasi, dan untuk memilih file basis data.Dengan Terminal.Gui, hal ini dapat dicapai secara langsung.
Fungsi ShowHelp, misalnya, membuat kotak dialog dari isi fungsi Get-Help dari cmdlet tertentu (seperti Open-PSWorkItemConsole). Fungsi ini mengambil deskripsi cmdlet, meneruskannya ke Out-String, dan menggunakannya sebagai teks dialog. Buat objek Dialog dengan judul, lebar, tinggi, dan perataan., menambahkan tombol “OK” (Terminal.Gui.Button dengan event Add_Clicked yang menutup dialog) dan menjalankan Application.Run padanya.
Untuk menampilkan informasi versi dan dependensi, ShowAbout mengumpulkan data dari berbagai assembly menggunakan Sistem.Refleksi.Rakitan.DapatkanRakitan(…).DapatkanNama().VersiBiasanya, ini mencakup versi PSWorkItem, PowerShell, Terminal.Gui, NStack, dan System.Data.SQLite. Dengan ini, ia menyusun string yang diformat dan meluncurkan MessageBox.Query dengan judul "Tentang" dan satu tombol "OK".
Pemilihan basis data kerja dilakukan dengan fungsi OpenDatabase, yang menginstansiasi sebuah OpenDialog dari Terminal.Gui, mengkonfigurasi CanChooseDirectories, CanChooseFiles dan AllowsMultipleSelection sesuai dengan apa yang ingin Anda izinkan. Anda menentukan direktori awal (misalnya, $HOME) dan daftar ekstensi yang valid, seperti .db.
Setelah menjalankan Application.Run($Dialog), akan diperiksa apakah pengguna belum membatalkan dan bahwa jalur file yang dipilih adaJika semuanya benar, kolom teks yang menyimpan jalur (misalnya, $txtPath.Text) akan diperbarui dan ini digunakan untuk memanggil RefreshCategoryList dan RefreshTable lagi, sehingga aplikasi secara otomatis mulai bekerja dengan basis data baru yang dipilih.
Untuk memastikan pengguna selalu mendapatkan informasi waktu terkini, biasanya juga didefinisikan fungsi UpdateStatusTime yang Perbarui judul item pertama di bilah status dengan tanggal dan waktu.Fungsi ini menjalankan Application.Refresh dan mengembalikan nilai boolean, sehingga dapat dihubungkan ke timer atau mekanisme penyegaran berkala.
Konfirmasi dan mode WhatIf di TUI
Ketika aplikasi TUI Anda memungkinkan Anda untuk membuat, memodifikasi, menyelesaikan, atau menghapus tugas, penting untuk menyertakan semacam konfirmasi sebelum mengeksekusi tindakan destruktifSalah satu cara elegan untuk melakukan ini adalah melalui fungsi ShowWhatIf, yang menghasilkan pesan seperti "beginilah tampilan perintahnya" tergantung pada tindakan yang dipilih.
ShowWhatIf biasanya menerima parameter Command dengan serangkaian nilai yang telah ditentukan sebelumnya (New, Set, Complete, Remove) dan, dalam beberapa kasus, pengidentifikasi tugas. Tergantung pada nilai yang diterima, Buat pesan teks yang menjelaskan cmdlet yang akan dieksekusi (New-PSWorkItem, Set-PSWorkItem, Complete-PSWorkItem, Remove-PSWorkItem), beserta informasi yang relevan: nama, kategori, deskripsi, progres, tanggal jatuh tempo, basis data, dll.
Untuk menghitung tanggal kedaluwarsa, fungsi ini dapat memeriksa apakah kontrol hari diaktifkan. Jika ya, fungsi ini menambahkan jumlah hari yang ditentukan ke tanggal saat ini; jika tidak, fungsi ini menggunakan nilai dari kolom tanggal yang ditentukan. Pola yang sama digunakan kembali baik di cabang New maupun Set.memastikan bahwa pesan yang ditampilkan sesuai dengan perilaku sebenarnya dari cmdlet saat dijalankan secara real time.
Setelah blok teks disusun (diformat sebagai here-string agar lebih jelas), ShowWhatIf akan diluncurkan. Terminal.Gui.MessageBox.Query dengan judul seperti “Operasi WhatIf”Pesan dan daftar tombol (biasanya hanya "OK") disertakan. Ini memungkinkan pengguna untuk dengan tenang meninjau apa yang akan terjadi sebelum menekan tombol yang sebenarnya memicu perintah tersebut.
Pola ini terintegrasi sempurna dengan filosofi PowerShell, di mana parameter -WhatIf dan pesan tiruan sangat umum digunakan. Menerapkan ide yang sama pada TUI (Transaction Interface) memperkuat keamanan dan kepercayaan pengguna. saat menangani data penting atau yang berpotensi merusak.
Menggabungkan Terminal.Gui dengan PowerShell membuka pintu untuk mengembangkan "aplikasi konsol" sejati dengan menu, kotak dialog, dan tabel, memanfaatkan sepenuhnya kekuatan cmdlet dan .NET. Dengan modul yang mengelola biner untuk .NET Core dan .NET Framework, fungsi konversi DataTable, dan beberapa rutin untuk menyegarkan formulir, menampilkan bantuan, dan mengkonfirmasi tindakan, dimungkinkan untuk membangun solusi yang sangat lengkap yang berfungsi di Windows PowerShell dan PowerShell 7 dengan perubahan kode minimal. Mereka membuat skrip Anda terasa seperti aplikasi desktop sungguhan.tetapi di terminal.
Penulis yang bersemangat tentang dunia byte dan teknologi secara umum. Saya suka berbagi ilmu melalui tulisan, dan itulah yang akan saya lakukan di blog ini, menunjukkan kepada Anda semua hal paling menarik tentang gadget, perangkat lunak, perangkat keras, tren teknologi, dan banyak lagi. Tujuan saya adalah membantu Anda menavigasi dunia digital dengan cara yang sederhana dan menghibur.