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.
Terkadang, PowerShell dapat memiliki masalah sebelum bahkan siap digunakan. Masalah startup mungkin sulit untuk memecahkan masalah, terutama ketika Anda ingin menggunakan PowerShell untuk membantu. Ada tiga fase utama startup:
- Pembuatan proses
- Inisialisasi PowerShell SessionState
- Pemrosesan profil
Masalah yang paling umum meliputi:
- Waktu mulai yang lama atau performa lambat
- Errors
- Kecelakaan
Langkah-langkah urutan startup
Sangat membantu untuk memahami langkah-langkah yang dilalui PowerShell selama startup. Dengan cara ini, Anda dapat mempersempit di mana masalah terjadi.
Langkah 1: Pembuatan proses
Pembuatan proses memiliki beberapa langkah:
Membuat jendela Host
Di Windows, Host dapat berupa Terminal Windows, Host Konsol Windows, Visual Studio Code, atau aplikasi hosting lainnya. Masalah yang terjadi di sini biasanya tidak terkait dengan PowerShell, tetapi juga sangat jarang terjadi.
Memulai proses host
Masalah yang terjadi di sini biasanya disebabkan oleh executable yang rusak atau masalah dalam sistem operasi.
Siapkan .NET
PowerShell berbasis .NET dan perlu dimuat sepenuhnya. Bergantung pada versi PowerShell mana yang Anda coba mulai, Anda mendapatkan .NET Framework terintegrasi Windows lengkap dengan Windows PowerShell 5.1 atau .NET yang lebih baru yang disertakan dalam PowerShell 7.
Pada startup pertama PowerShell, PowerShell dan .NET menjalankan tugas pengoptimalan. Tugas pengoptimalan ini hanya dijalankan sekali, selama startup pertama setelah penginstalan, peningkatan, atau jika cache kosong. Startup akan memakan waktu lebih lama selama pengoptimalan pertama kali ini. Kegagalan selama pengoptimalan dapat membuat cache yang rusak. Cache PowerShell yang rusak dapat menyebabkan masalah dengan penemuan perintah dan pemuatan modul.
Langkah 2: Inisialisasi PowerShell SessionState
Memuat biner PowerShell dan menginisialisasi mesin melibatkan pemrosesan konfigurasi PowerShell dan beberapa data cache.
- Memproses file konfigurasi:
powershell.config.jsondan file konfigurasi PSSession yang digunakan oleh JEA dan skenario jarak jauh lainnya. File-file ini mungkin berisi pengaturan yang dapat memengaruhi mode bahasa, perintah dan modul yang tersedia, dan beberapa pengaturan kebijakan. - Periksa Kebijakan Grup dan kebijakan Keamanan Windows. Kebijakan Grup Windows dapat mengambil alih pengaturan di
powershell.config.json. Kebijakan Keamanan dapat mengaktifkan fitur seperti WDAC (Kontrol Aplikasi Pertahanan Windows), yang juga dapat membatasi mode bahasa yang tersedia. - Muat modul default (Microsoft.PowerShell.Core dan PSReadLine) serta modul dan rakitan apa pun yang ditentukan dalam konfigurasi PSSession.
Untuk informasi selengkapnya tentang fitur keamanan PowerShell, lihat artikel berikut ini:
Langkah 3: Pemrosesan profil
Terakhir, PowerShell menjalankan file profil yang tersedia. Skrip profil dijalankan dalam urutan berikut:
- Semua Host dan Semua Pengguna
- Host Saat Ini, Semua Pengguna
- Semua Pengguna Host Saat Ini
- Pengguna Host Saat Ini
Nota
Skrip profil tidak dijalankan untuk sesi jarak jauh.
Untuk informasi selengkapnya tentang profil, lihat about_Profiles.
Mempersempit cakupan masalah
Sangat membantu untuk menghapus variabel dan mempersempit cakupan spesifik tempat masalah terjadi. Variabel yang paling mudah dihilangkan adalah profil. Profil sering berisi kode kustom, terutama dalam skrip profil khusus pengguna.
Coba jalankan PowerShell dengan profil dinonaktifkan:
# PS 5.1:
powershell -NoProfile
# PS 7.*:
pwsh -NoProfile
Selanjutnya Anda sebaiknya memeriksa apakah masalahnya khusus untuk versi tertentu. Coba jalankan profil Anda di Windows PowerShell 5.1 dan PowerShell 7. Windows PowerShell dan PowerShell 7 menyimpan profil di lokasi yang berbeda. Profil Anda mungkin tidak sama untuk kedua versi. Bandingkan file untuk memahami perbedaannya. Anda dapat mencoba menginstal profil PowerShell Anda di Windows PowerShell 5.1. Namun, ketahuilah bahwa beberapa perintah dan modul PowerShell 7 tidak kompatibel dengan Windows PowerShell 5.1.
Anda dapat menguji profil PowerShell 7 Anda di Windows PowerShell 5.1 tanpa mengganti profil yang sudah ada.
Mulai Windows PowerShell 5.1 dengan profil dinonaktifkan.
Dot-source secara manual file profil PowerShell 7 Anda ke dalam sesi Windows PowerShell 5.1.
. $env:USERPROFILE\Documents\PowerShell\Microsoft.PowerShell_profile.ps1Amati apakah masalah terjadi.
Jika masalah berlanjut, maka Anda tahu masalah adalah masalah lingkungan di luar profil.
Coba jalankan profil pada perangkat lain. Jika profil berfungsi dengan benar di perangkat lain, maka Anda tahu masalahnya khusus untuk perangkat asli Anda.
Memecahkan masalah lingkungan umum
Kerusakan saat startup
Jika konsol PowerShell mengalami crash selama startup, terutama lebih awal dan tanpa umpan balik, Anda bisa memiliki cache proses yang rusak. Ini adalah kondisi langka yang dapat Anda atasi dengan menghapus cache. Ada dua lokasi cache yang dapat dibersihkan:
- Singgahan Pengguna:
$env:LOCALAPPDATA\Microsoft\Windows\Caches - Singgahan Sistem:
$env:windir\System32\Config\SystemProfile\AppData\Local\Microsoft\Windows\Caches
Hapus konten folder cache pengguna terlebih dahulu, lalu coba mulai Lagi PowerShell. Jika masalah berlanjut, hapus isi cache sistem dan coba lagi.
Anda mungkin juga perlu menghapus cache analisis PowerShell. Anda dapat menemukan file cache di lokasi berikut:
- Windows PowerShell:
$env:windir\System32\Config\SystemProfile\AppData\Local\Microsoft\Windows\PowerShell - PowerShell 7:
$env:LOCALAPPDATA\Microsoft\PowerShell
Hapus hanya pola file berikut:
ModuleAnalysisCache-*StartupProfileData-*
Data yang di-cache dibuat ulang saat Anda memulai PowerShell di lain waktu.
Jika masalah berlanjut di Windows PowerShell 5.1, Anda mungkin perlu memperbaiki penginstalan .NET Framework. Untuk informasi selengkapnya, lihat Memperbaiki .NET Framework.
Memecahkan masalah profil umum
Bagian ini menjelaskan beberapa masalah umum yang dapat terjadi selama startup PowerShell, dan cara memecahkan masalahnya.
Profil membutuhkan waktu terlalu lama untuk dijalankan
Pertama, Anda harus mendefinisikan apa yang "terlalu panjang." PowerShell hanya melakukan apa yang skrip katakan untuk dilakukan. Periksa semua jalur profil. Ada kemungkinan beberapa skrip profil sedang dijalankan. Tinjau kode untuk memahami yang coba dilakukan.
Tentukan di mana penundaan terjadi
Jika ada skrip profil untuk cakupan AllUsers , Anda mungkin tidak dapat mengedit file-file tersebut. Bekerja sama dengan administrator sistem Anda untuk meninjau file-file tersebut. Untuk skrip profil cakupan CurrentUser , edit file tersebut untuk menambahkan pesan waktu untuk membantu Anda menemukan di mana penundaan terjadi. Misalnya, Anda dapat menambahkan baris berikut di berbagai titik di skrip profil Anda.
Write-Host "$(Get-Date -Format 'HH:mm:ss.fff') | Profile: Step X"Mengurangi dependensi
Kurangi jumlah modul yang perlu dimuat untuk menjalankan profil Anda. Jalankan
Get-Modulesetelah profil berjalan untuk melihat modul yang dimuat saat startup. Secara default, PowerShell memuat modul Microsoft.PowerShell.Core dan PSReadLine. Modul tambahan apa pun dimuat oleh skrip profil Anda.Modul dapat dimuat secara eksplisit dengan menggunakan
Import-Moduleatau secara implisit dengan menggunakan perintah yang ditentukan dalam modul tersebut. Pertimbangkan apakah Anda memerlukan perintah atau modul yang dimuat selama startup.Hindari menginstal modul di folder yang dialihkan
Dalam banyak situasi di Windows, folder Anda
Documentsdapat diarahkan ke berbagi file jaringan atau ke OneDrive. Akses file jaringan bisa lambat, terutama jika jaringan padat atau server berada di bawah beban berat. Bergantung pada bagaimana OneDrive dikonfigurasi, OneDrive juga dapat menimbulkan penundaan atau menyebabkan kesalahan selama eksekusi profil.Anda memiliki beberapa opsi untuk mengurangi masalah ini:
- Jangan alihkan folder
DocumentsAnda, meskipun mungkin bukan itu yang Anda inginkan. - Konfigurasikan folder Anda
Modulesdi OneDrive agar selalu disimpan di disk. Ini mencegah kesalahan dan waktu pemuatan tertunda. - Instal modul di cakupan AllUsers , yang berada di luar folder profil pengguna.
- Jangan alihkan folder
Mengukur kinerja aktual
Jika Anda tidak tahu berapa lama profil Anda berjalan, Anda tidak dapat menentukan apakah profil terlalu panjang.
Measure-CommandCmdlet dapat menunjukkan berapa lama perintah atau blok skrip dijalankan.Steve Lee, PowerShell Dev Manager, memiliki posting blog yang menjelaskan cara mengukur performa profil Anda. Ini termasuk instruksi untuk membuat garis besar untuk performa, cara mendapatkan informasi waktu terperinci, dan cara untuk mengoptimalkan profil Anda. Lihat Mengoptimalkan $Profile Anda.
PowerShell 7 dimulai secara perlahan dalam jaringan terisolasi
Dalam skenario ini, komputer Windows Anda berada pada jaringan yang tidak tersambung ke internet. Untuk sesi PowerShell interaktif, PowerShell memuat modul PSReadLine secara otomatis. PSReadLine adalah modul yang ditandatangani. PowerShell harus memverifikasi tanda tangan digital modul. Verifikasi ini dapat menyebabkan keterlambatan di lingkungan yang terputus. Untuk menguji teori ini, mulai PowerShell 7 dalam mode non-interaktif :
pwsh.exe -noninteractive
Jika PowerShell dimulai dengan cepat dalam mode non-interaktif, maka masalahnya kemungkinan disebabkan oleh pemeriksaan Daftar Pencabutan Sertifikat (CRL). Sebagai bagian dari proses verifikasi tanda tangan digital, runtime .NET memeriksa CRL untuk memastikan bahwa sertifikat penandatanganan masih valid. Di lingkungan yang terputus, komputer Anda tidak dapat mengakses CRL di internet. Batas waktu default untuk pemeriksaan CRL adalah 15 detik. Ini berarti bahwa setiap kali PowerShell memuat modul yang ditandatangani, dibutuhkan waktu hingga 15 detik hingga batas waktu.
Ada tiga kemungkinan solusi untuk masalah ini:
Firewall atau pengecualian proksi
Mengizinkan akses internet langsung untuk pemeriksaan CRL mencegah masalah. Di lingkungan tempat Anda dapat mengontrol akses ke akses internet, Anda dapat mengonfigurasi firewall atau proksi untuk mengizinkan akses ke Url CRL. Ini adalah solusi termampu dengan dampak paling sedikit. Log firewall harus menampilkan Url yang coba dijangkau PowerShell.
Kurangi Batas Waktu CRL
Mengurangi batas waktu pencarian CRL dimungkinkan, tetapi melakukannya berisiko pencarian lain gagal, yang tidak dapat diselesaikan dalam waktu yang ditentukan. Untuk detail tentang cara mengubah batas waktu, lihat Mengelola Pengambilan Jaringan dan Validasi Jalur.
Menghapus pemeriksaan CRL
Pengaturan pemeriksaan CRL dikelola melalui Kebijakan Grup. Untuk informasi selengkapnya, lihat Mengelola Penerbit Tepercaya.
Peringatan
Dimungkinkan untuk menonaktifkan pemeriksaan CRL; namun, hal tersebut tidak disarankan. Menghentikan pemeriksaan CRL mencegah Anda secara efektif mencabut sertifikat yang disusupi.
KESALAHAN: Tidak dapat menjalankan perintah dot-source ini karena didefinisikan dalam mode bahasa yang berbeda
PowerShell bekerja dengan sistem kontrol aplikasi, seperti AppLocker dan Windows Defender Application Control (WDAC), dengan secara otomatis berjalan dalam mode ConstrainedLanguage . Mode ConstrainedLanguage membatasi beberapa fitur yang berpotensi berbahaya. Namun, ada kalanya Anda memerlukan mode FullLanguage untuk menggunakan perintah atau fitur tertentu. Skrip dapat berjalan dalam mode FullLanguage saat dipercaya oleh kebijakan. Kepercayaan dapat ditunjukkan melalui penandatanganan file atau mekanisme kebijakan lain yang dikonfigurasi di AppLocker atau WDAC.
Saat Anda memulai sesi PowerShell yang dikelola di bawah kontrol aplikasi, Anda mendapatkan kesalahan berikut:
Cannot dot-source this command because it was defined in a different language mode. To invoke this
command without importing its contents, omit the '.' operator.
Di bawah kontrol aplikasi, PowerShell berjalan dalam mode ConstrainedLanguage . Kesalahan ini terjadi ketika skrip profil Anda dikecualikan atau ditandatangani untuk dijalankan dalam mode FullLanguage. Saat PowerShell berjalan dalam mode ConstrainedLanguage , powerShell tidak dapat dipercaya untuk menjalankan kode sumber titik dalam mode FullLanguage .
Untuk mengatasi masalah ini, Anda harus menghapus pengecualian atau tanda tangan dari skrip profil. Jika Anda memerlukan kode yang harus berjalan dalam mode FullLanguage selama profil Anda, pindahkan ke file skrip lain yang dikecualikan atau ditandatangani. Jalankan (jangan gunakan dot-source) berkas skrip tersebut dari dalam profil Anda.
Untuk informasi selengkapnya tentang masalah ini, lihat Mode Bahasa Yang Dibatasi PowerShell dan Operator Dot-Source.