Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Invoke-Expression
Cmdlet hanya boleh digunakan sebagai upaya terakhir. Dalam sebagian besar skenario, alternatif yang lebih aman dan lebih kuat tersedia. Forum seperti Stack Overflow diisi dengan contoh penyalahgunaan Invoke-Expression
. Perhatikan juga bahwa PSScriptAnalyzer memiliki aturan untuk ini. Untuk informasi selengkapnya, lihat MenghindariPenggunaanInvokeExpression.
Pertimbangkan implikasi keamanan dengan hati-hati. Ketika string dari sumber yang tidak tepercaya seperti input pengguna diteruskan langsung ke Invoke-Expression
, perintah arbitrer dapat dijalankan. Selalu pertimbangkan solusi yang berbeda, lebih kuat, dan aman terlebih dahulu.
Skenario umum
Pertimbangkan skenario penggunaan berikut:
Lebih mudah untuk mengalihkan PowerShell untuk menjalankan sesuatu secara alami. Contohnya:
Get-Content ./file.ps1 | Invoke-Expression
Kasus-kasus ini dapat dihindari secara sepele. Skrip atau kode sudah ada dalam file atau formulir AST, jadi Anda harus menulis skrip dengan parameter dan memanggilnya secara langsung alih-alih menggunakan
Invoke-Expression
pada string.Menjalankan skrip dari sumber tepercaya. Misalnya, menjalankan skrip penginstalan dari repositori PowerShell:
Invoke-WebRequest https://aka.ms/install-powershell.ps1 | Invoke-Expression
Anda hanya boleh menggunakan ini secara interaktif. Dan, meskipun ini membuat hidup lebih sederhana, praktik ini harus disarankan.
Pengujian untuk kesalahan penguraian. Tim PowerShell menguji kesalahan penguraian dalam kode sumber menggunakan
Invoke-Expression
karena itulah satu-satunya cara untuk mengubah kesalahan penguraian waktu menjadi runtime.
Kesimpulan
Sebagian besar bahasa skrip lainnya memiliki cara untuk mengevaluasi string sebagai kode, dan sebagai bahasa yang ditafsirkan, PowerShell harus memiliki cara untuk menjalankannya secara dinamis. Tetapi tidak ada alasan yang baik untuk digunakan Invoke-Expression
di lingkungan produksi.
Referensi
- Diskusi Stack Overflow - Dalam skenario apa Invoke-Expression dirancang untuk digunakan?
- Posting blog PowerShell - Invoke-Expression Dianggap Berbahaya