Bagikan melalui


tentang_Variabel_Lingkungan

Deskripsi singkat

Menjelaskan cara mengakses dan mengelola variabel lingkungan di PowerShell.

Deskripsi panjang

Variabel lingkungan menyimpan data yang digunakan oleh sistem operasi dan program lainnya. PowerShell membuat variabel lingkungan berikut:

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • POWERSHELL_DIAGNOSTICS_OPTOUT
  • PSExecutionPolicyPreference
  • PSModulePath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

Untuk deskripsi lengkap variabel ini, lihat variabel lingkungan PowerShell artikel ini.

PowerShell dapat mengakses dan mengelola variabel lingkungan di salah satu platform sistem operasi yang didukung. Penyedia Lingkungan PowerShell memungkinkan Anda mendapatkan, menambahkan, mengubah, menghapus, dan menghapus variabel lingkungan di konsol saat ini.

Nota

Tidak seperti Windows, nama variabel lingkungan di macOS dan Linux peka terhadap penggunaan huruf kapital. Misalnya, $Env:Path dan $Env:PATH adalah variabel lingkungan yang berbeda pada platform non-Windows.

Variabel lingkungan, tidak seperti jenis variabel lain di PowerShell, selalu disimpan sebagai string. Tidak seperti variabel lainnya, variabel tersebut diwarisi oleh proses turunan, seperti pekerjaan latar belakang lokal dan sesi di mana anggota modul berjalan. Ini membuat variabel lingkungan sangat cocok untuk menyimpan nilai yang diperlukan dalam proses induk dan anak.

Pada Windows, variabel lingkungan dapat didefinisikan dalam tiga cakupan:

  • Cakupan Mesin (atau Sistem)
  • Cakupan pengguna
  • Cakupan proses

Cakupan Proses berisi variabel environment yang tersedia dalam proses saat ini, atau dalam sesi PowerShell. Daftar variabel ini diwarisi dari proses induk dan dibangun dari variabel dalam cakupan Komputer dan cakupan Pengguna.

Saat Anda mengubah variabel lingkungan di PowerShell, perubahan hanya memengaruhi sesi saat ini. Perilaku ini menyerupan perilaku perintah set di Windows Command Shell dan perintah setenv di lingkungan berbasis Unix. Untuk mengubah nilai dalam cakupan Mesin atau Pengguna, Anda harus menggunakan metode kelas System.Environment.

Untuk membuat perubahan pada variabel yang menerapkan cakupan mesin, Anda memerlukan izin. Jika Anda mencoba mengubah nilai tanpa izin yang memadai, perintah gagal dan PowerShell menampilkan kesalahan.

PowerShell menyediakan beberapa metode berbeda untuk menggunakan dan mengelola variabel lingkungan.

  • Sintaks variabel
  • Penyedia lingkungan dan cmdlet Item
  • Kelas .NET System.Environment

Gunakan sintaks variabel

Anda dapat menampilkan dan mengubah nilai variabel lingkungan dengan sintaks berikut:

$Env:<variable-name>

Misalnya, untuk menampilkan nilai variabel lingkungan windir:

$Env:windir
C:\Windows

Dalam sintaks ini, tanda dolar ($) menunjukkan variabel, dan nama drive (Env:) menunjukkan variabel lingkungan diikuti dengan nama variabel (windir).

Anda dapat membuat dan memperbarui nilai variabel lingkungan dengan sintaks berikut:

$Env:<variable-name> = "<new-value>"

Misalnya, untuk membuat variabel lingkungan Foo:

$Env:Foo = 'An example'

Karena variabel lingkungan selalu string, Anda dapat menggunakannya seperti variabel lain yang berisi string. Misalnya:

"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example

An example!

Dimulai di PowerShell 7.5, Anda dapat mengatur variabel lingkungan ke string kosong. Mengatur variabel lingkungan untuk $null menghapusnya dari sesi saat ini. Misalnya:

PS> $env:TEST = ''
PS> Get-ChildItem env:TEST

Name                           Value
----                           -----
TEST

PS> $env:TEST = $null
PS> $env:TEST.Length
0

PS> Get-ChildItem env:TEST

Get-ChildItem: Cannot find path 'TEST' because it does not exist.

Untuk informasi selengkapnya tentang variabel di PowerShell, lihat about_Variables.

Menggunakan penyedia Lingkungan dan cmdlet Item

Penyedia Lingkungan PowerShell memberi Anda antarmuka untuk berinteraksi dengan variabel lingkungan dalam format yang menyerupai drive dalam sistem berkas. Ini memungkinkan Anda mendapatkan, menambahkan, mengubah, menghapus, dan menghapus variabel dan nilai lingkungan di PowerShell.

Misalnya, untuk membuat variabel lingkungan Foo dengan nilai Bar:

New-Item -Path Env:\Foo -Value 'Bar'
Name                           Value
----                           -----
Foo                            Bar

Anda juga dapat menyalin variabel lingkungan dengan Copy-Item, mengatur nilai variabel lingkungan dengan Set-Item, mencantumkan variabel lingkungan dengan Get-Item, dan menghapus variabel lingkungan dengan Remove-Item.

Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name                           Value
----                           -----
Foo2                           Bar

Name                           Value
----                           -----
Foo2                           BAR
Foo                            Bar

VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".

Gunakan cmdlet Get-ChildItem untuk melihat daftar lengkap variabel lingkungan:

Get-ChildItem Env:

Dimulai di PowerShell 7.5, Anda dapat mengatur variabel lingkungan ke string kosong menggunakan penyedia lingkungan dan Set-Item cmdlet. Mengatur variabel lingkungan untuk $null menghapusnya dari sesi saat ini. Misalnya:

PS> Set-Item env:TEST 'Foo'
PS> Get-ChildItem env:TEST

Name                           Value
----                           -----
TEST                           Foo

PS> Set-Item env:TEST ''
PS> Get-ChildItem env:TEST

Name                           Value
----                           -----
TEST

PS> Set-Item -Path env:TEST -Value $null
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.

Untuk informasi selengkapnya tentang menggunakan penyedia Lingkungan untuk mengelola variabel lingkungan, lihat about_Environment_Provider.

Menggunakan metode System.Environment

Kelas System.Environment menyediakan metode GetEnvironmentVariable() dan SetEnvironmentVariable() untuk mendapatkan dan memodifikasi variabel lingkungan.

Contoh berikut membuat variabel lingkungan baru, Foo, dengan nilai Bar lalu mengembalikan nilainya.

[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar

Dimulai di PowerShell 7.5, Anda dapat mengatur variabel lingkungan ke string kosong menggunakan SetEnvironmentVariable() metode dan menentukan string kosong atau $null untuk nilai variabel. Misalnya:

PS> [Environment]::SetEnvironmentVariable('Foo','Bar')
PS> Get-ChildItem env:Foo

Name                           Value
----                           -----
Foo                            Bar

PS> [Environment]::SetEnvironmentVariable('Foo','')
PS> Get-ChildItem env:Foo

Name                           Value
----                           -----
Foo

PS> [Environment]::SetEnvironmentVariable('Foo','bar')
PS> Get-ChildItem env:Foo

Name                           Value
----                           -----
Foo                            bar

PS> [Environment]::SetEnvironmentVariable('Foo',$null)
PS> Get-ChildItem env:Foo

Name                           Value
----                           -----
Foo

Nota

Tidak seperti sintaks variabel dan kasus penyedia, menetapkan nilai untuk $null menggunakan SetEnvironmentVariable() metode tidak menghapus variabel lingkungan.

Untuk informasi selengkapnya tentang metode kelas System.Environment, lihat Metode Lingkungan .

Membuat variabel lingkungan persisten di Windows

Di Windows, ada tiga metode untuk membuat perubahan persisten pada variabel lingkungan:

  • Anda dapat mengaturnya di profil Anda
  • Menggunakan metode SetEnvironmentVariable()
  • Menggunakan Panel Kontrol Sistem

Mengatur variabel lingkungan di profil Anda

Variabel lingkungan apa pun yang Anda tambahkan atau ubah di profil PowerShell Anda tersedia dalam sesi apa pun yang memuat profil Anda. Metode ini berfungsi untuk versi PowerShell apa pun pada platform apa pun yang didukung.

Misalnya, untuk membuat variabel lingkungan CompanyUri dan memperbarui variabel lingkungan PATH untuk menyertakan folder C:\Tools, tambahkan baris berikut ke profil PowerShell Anda:

$Env:CompanyUri = 'https://internal.contoso.com'
$Env:PATH += ';C:\Tools'

Nota

Di Linux atau macOS, titik dua (:) digunakan alih-alih titik koma(;) untuk memisahkan jalur baru dari jalur yang mendahuluinya dalam daftar.

Anda bisa mendapatkan jalur ke profil PowerShell Anda dengan variabel otomatis $PROFILE. Untuk informasi selengkapnya tentang profil, lihat about_Profiles.

Mengatur variabel lingkungan dengan SetEnvironmentVariable()

Di Windows, Anda dapat menentukan cakupan untuk metode SetEnvironmentVariable() sebagai parameter ketiga untuk mengatur variabel lingkungan dalam cakupan tersebut. Cakupan komputer dan pengguna keduanya bertahan di luar proses saat ini, memungkinkan Anda menyimpan variabel lingkungan baru atau yang diubah.

Misalnya, untuk menyimpan variabel lingkungan baru Foo dengan nilai Barke cakupan komputer:

[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')

Anda dapat menghapus variabel lingkungan dari lingkup pengguna atau mesin dengan mengatur nilai variabel ke string kosong.

[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')

Mengatur variabel lingkungan di Panel Kontrol Sistem

Di Panel Kontrol Sistem, Anda dapat menambahkan atau mengedit variabel lingkungan yang ada dalam cakupan Pengguna dan Sistem (Mesin). Windows menulis nilai-nilai ini ke Registri sehingga bertahan di seluruh sesi dan memulai ulang sistem.

Untuk membuat perubahan persisten pada variabel lingkungan pada Windows menggunakan Panel Kontrol Sistem:

  1. Buka Panel Kontrol Sistem.
  2. Pilih Sistem.
  3. Pilih Pengaturan Sistem Tingkat Lanjut.
  4. Buka tab Tingkat Lanjut.
  5. Pilih Variabel Lingkungan ....
  6. Buat perubahan Anda.

Membuat variabel lingkungan persisten pada platform non-Windows

Linux dan macOS memiliki file konfigurasi dan skrip yang digunakan sistem operasi untuk mengatur variabel lingkungan sebelum memulai aplikasi.

Saat menjalankan PowerShell sebagai shell default (masuk), Anda dapat menentukan variabel lingkungan dalam file inisialisasi global yang didukung oleh sistem operasi. Misalnya di Linux, Anda dapat menambahkan variabel lingkungan ke file /etc/environment atau membuat skrip yang mengatur variabel lingkungan dan meletakkannya di folder /etc/profile.d. Di macOS, Anda dapat menambahkan variabel lingkungan ke file /etc/profile.

Saat memulai PowerShell dari shell lain, Anda dapat menentukan variabel lingkungan dalam file inisialisasi khusus shell yang digunakan oleh shell non-login, seperti ~/.bashrc untuk bash atau ~/.zshrc untuk zsh.

Untuk informasi selengkapnya, lihat dokumentasi untuk sistem operasi dan shell default Anda.

Variabel lingkungan PowerShell

Fitur PowerShell dapat menggunakan variabel lingkungan untuk menyimpan preferensi pengguna. Variabel ini berfungsi seperti variabel preferensi, tetapi variabel ini diwarisi oleh sesi-sesi turunan dari sesi tempat mereka dibuat. Untuk informasi selengkapnya tentang variabel preferensi, lihat about_Preference_Variables.

Variabel lingkungan yang menyimpan preferensi meliputi:

  • POWERSHELL_TELEMETRY_OPTOUT

    Untuk menolak telemetri, atur variabel lingkungan ke true, yes, atau 1. Untuk informasi selengkapnya, lihat tentang_Telemetri.

    Agar variabel lingkungan ini berpengaruh, variabel harus diatur sebelum memulai proses PowerShell. Lihat bagian sebelumnya untuk informasi tentang membuat variabel lingkungan persisten.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    Dimulai di PowerShell 7.2, variabel lingkungan ini diatur oleh paket alat penginstal untuk merekam metode dan sumber penginstalan untuk PowerShell.

    Informasi ini disertakan dalam data telemetri yang dikirim ke Microsoft. Pengguna tidak boleh mengubah nilai ini.

  • POWERSHELL_UPDATECHECK

    Perilaku pemberitahuan pembaruan dapat diubah menggunakan variabel lingkungan POWERSHELL_UPDATECHECK. Untuk informasi selengkapnya, lihat about_Update_Notifications.

    Nilai berikut ini didukung:

    • Off menonaktifkan fitur pemberitahuan pembaruan
    • Default sama dengan tidak menentukan POWERSHELL_UPDATECHECK:
      • Rilis GA menginformasikan tentang pembaruan pada rilis GA
      • Rilis Pratinjau/RC memberi tahu pembaruan untuk GA dan rilis pratinjau
    • LTS hanya memberitahukan pembaruan untuk rilis layanan jangka panjang (LTS) GA

    Nilai non-default variabel lingkungan harus diatur sebelum memulai proses PowerShell. Lihat bagian sebelumnya untuk informasi tentang membuat variabel lingkungan persisten.

  • POWERSHELL_DIAGNOSTICS_OPTOUT

    Variabel lingkungan ini ditambahkan di PowerShell 7.6-preview.5. Secara default, PowerShell membuat pipa bernama yang digunakan untuk Interprocess Communication (IPC), seperti Enter-PSHostProcess. PowerShell membuat pipa bernama saat startup sehingga tersedia untuk digunakan saat diperlukan.

    Pada platform non-Windows, pipa bernama diimplementasikan sebagai file dalam /tmp folder . Jika PowerShell crash, file-file ini mungkin tidak dihapus. Seiring waktu, file-file ini dapat terakumulasi.

    Dimulai di PowerShell 7.6, POWERSHELL_DIAGNOSTICS_OPTOUT diatur ke false. Untuk menonaktifkan pembuatan pipa bernama, atur variabel lingkungan ke true, yes, atau 1.

  • PSExecutionPolicyPreference

    Menyimpan kebijakan eksekusi yang ditetapkan untuk sesi saat ini. Variabel lingkungan ini hanya ada ketika Anda menetapkan kebijakan eksekusi untuk satu sesi. Anda dapat melakukan ini dengan dua cara berbeda.

    • Mulai sesi dari baris perintah menggunakan parameter ExecutionPolicy untuk mengatur kebijakan eksekusi untuk sesi tersebut.

    • Gunakan cmdlet Set-ExecutionPolicy. Gunakan parameter Cakupan dengan nilai .

    • Atur variabel lingkungan secara manual. Mengubah nilai variabel ini mengubah kebijakan eksekusi proses saat ini.

    Informasi ini hanya berlaku untuk platform Windows. Untuk informasi selengkapnya, lihat about_Execution_Policies.

  • PSModulePath

    Variabel lingkungan $Env:PSModulePath berisi daftar lokasi folder yang dicari untuk menemukan modul dan sumber daya. Di Windows, daftar lokasi folder dipisahkan oleh karakter titik koma (;). Pada platform non-Windows, titik dua (:) memisahkan lokasi folder dalam variabel lingkungan.

    Secara default, lokasi efektif yang ditetapkan ke $Env:PSModulePath adalah:

    • Lokasi di seluruh sistem: Folder ini berisi modul yang dikirim dengan PowerShell. Modul disimpan di lokasi $PSHOME\Modules. Selain itu, Ini adalah lokasi tempat modul manajemen Windows diinstal.

    • Modul yang diinstal pengguna: Ini adalah modul yang diinstal oleh pengguna. memiliki parameter Cakupan yang memungkinkan Anda menentukan apakah modul diinstal untuk pengguna saat ini atau untuk semua pengguna. Untuk informasi selengkapnya, lihat Install-Module.

      • Di Windows, lokasi cakupan CurrentUser khusus pengguna adalah folder $HOME\Documents\PowerShell\Modules. Lokasi cakupan AllUsers adalah $Env:ProgramFiles\PowerShell\Modules.
      • Pada sistem non-Windows, lokasi cakupan CurrentUser khusus pengguna adalah folder $HOME/.local/share/powershell/Modules. Lokasi cakupan AllUsers adalah /usr/local/share/powershell/Modules.

    Selain itu, program penyiapan yang menginstal modul di direktori lain, seperti direktori Program Files, dapat menambahkan lokasinya ke nilai $Env:PSModulePath.

    Untuk informasi selengkapnya, lihat about_PSModulePath.

  • PSModuleAnalysisCachePath

    PowerShell menyediakan kontrol atas file yang digunakan untuk menyimpan data tentang modul dan cmdletnya. Cache dibaca saat startup saat mencari perintah dan ditulis pada utas latar belakang beberapa saat setelah modul diimpor.

    Lokasi default cache adalah:

    • Windows PowerShell 5.1: $Env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 dan yang lebih tinggi: $Env:LOCALAPPDATA\Microsoft\PowerShell
    • Non-Windows bawaan: ~/.cache/powershell

    Nama file default untuk cache adalah ModuleAnalysisCache. Ketika Anda memiliki beberapa instans PowerShell yang terinstal, nama file menyertakan akhiran heksadesimal sehingga ada nama file unik per penginstalan.

    Nota

    Jika penemuan perintah tidak berfungsi dengan benar, misalnya IntelliSense menunjukkan perintah yang tidak ada, Anda dapat menghapus file cache. Cache dibuat ulang lain kali Anda memulai PowerShell.

    Untuk mengubah lokasi default cache, atur variabel lingkungan sebelum memulai PowerShell. Nilai harus memberi nama jalur lengkap (termasuk nama file) bahwa PowerShell memiliki izin untuk membuat dan menulis file.

    Perubahan pada variabel lingkungan ini hanya memengaruhi proses anak. Lihat bagian sebelumnya untuk informasi tentang membuat variabel lingkungan persisten.

    Untuk menonaktifkan cache file, atur nilai ini ke lokasi yang tidak valid, misalnya:

    # `NUL` here is a special device on Windows that can't be written to,
    # on non-Windows you would use `/dev/null`
    $Env:PSModuleAnalysisCachePath = 'NUL'
    

    Ini mengatur jalur ke perangkat NUL. PowerShell tidak dapat menulis ke path tetapi tidak ada kesalahan yang dikembalikan. Anda dapat melihat kesalahan yang dilaporkan menggunakan pelacak:

    Trace-Command -PSHost -Name Modules -Expression {
      Import-Module Microsoft.PowerShell.Management -Force
    }
    
  • PSDisableModuleAnalysisCacheCleanup

    Saat menulis cache analisis modul, PowerShell memeriksa modul yang tidak ada lagi untuk menghindari cache besar yang tidak perlu. Terkadang pemeriksaan ini tidak diinginkan, dalam hal ini Anda dapat menonaktifkannya dengan mengatur nilai variabel lingkungan ini ke 1.

    Pengaturan variabel lingkungan ini berlaku untuk peristiwa pembersihan berikutnya dalam proses saat ini. Untuk memastikan bahwa pembersihan dinonaktifkan saat startup, Anda harus mengatur variabel lingkungan sebelum memulai PowerShell. Lihat bagian sebelumnya untuk informasi tentang membuat variabel lingkungan persisten.

Variabel lingkungan lain yang digunakan oleh PowerShell

Informasi jalur

  • PATH

    Variabel lingkungan $Env:PATH berisi daftar lokasi folder yang dicari sistem operasi untuk file yang dapat dieksekusi. Di Windows, daftar lokasi folder dipisahkan oleh karakter titik koma (;). Pada platform non-Windows, titik dua (:) memisahkan lokasi folder dalam variabel lingkungan.

  • PATHEXT

    Variabel $Env:PATHEXT berisi daftar ekstensi file yang dianggap Windows sebagai file yang dapat dieksekusi. Saat file skrip dengan salah satu ekstensi yang tercantum dijalankan dari PowerShell, skrip berjalan di konsol atau sesi terminal saat ini. Jika ekstensi file tidak tercantum, skrip berjalan dalam sesi konsol baru.

    Untuk memastikan bahwa skrip untuk bahasa skrip lain berjalan di sesi konsol saat ini, tambahkan ekstensi file yang digunakan oleh bahasa skrip. Misalnya, untuk menjalankan skrip Python di konsol saat ini, tambahkan ekstensi .py ke variabel lingkungan. Agar Windows mendukung ekstensi .py sebagai file yang dapat dieksekusi, Anda harus mendaftarkan ekstensi file menggunakan perintah ftype dan assoc dari shell perintah CMD. PowerShell tidak memiliki metode langsung untuk mendaftarkan handler file. Untuk informasi selengkapnya, lihat dokumentasi untuk perintah ftype .

    Skrip PowerShell selalu dimulai dalam sesi konsol saat ini. Anda tidak perlu menambahkan ekstensi .ps1.

  • XDG variabel

    Pada platform non-Windows, PowerShell menggunakan variabel lingkungan XDG berikut seperti yang didefinisikan oleh Spesifikasi Direktori Dasar XDG.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

Fitur terminal

Dimulai di PowerShell 7.2, variabel lingkungan berikut dapat digunakan untuk mengontrol fitur Terminal Virtual seperti urutan escape ANSI yang mewarnai output. Dukungan untuk urutan escape ANSI dapat dinonaktifkan menggunakan variabel lingkungan TERM atau NO_COLOR.

  • TERM

    Nilai $Env:TERM berikut mengubah perilaku sebagai berikut:

    • dumb - mengatur $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono - mengatur $PSStyle.OutputRendering = PlainText
    • xterm - mengatur $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    Jika $Env:NO_COLOR ada, maka $PSStyle.OutputRendering diatur ke PlainText. Untuk informasi selengkapnya tentang variabel lingkungan NO_COLOR, lihat https://no-color.org/.

Lihat juga