Ortam Değişkenleri Hakkında

KıSA AÇıKLAMA

PowerShell'de Windows ortam değişkenlerine erişmeyi açıklar.

UZUN AÇıKLAMA

Ortam değişkenleri, işletim sistemi ortamı hakkındaki bilgileri depolar. Bu bilgiler, işletim sistemi yolu, işletim sistemi tarafından kullanılan işlemci sayısı ve geçici klasörlerin konumu gibi ayrıntıları içerir.

Ortam değişkenleri, işletim sistemi ve diğer programlar tarafından kullanılan verileri depolar. Örneğin, WINDIR ortam değişkeni Windows yükleme dizininin konumunu içerir. Programlar, Windows işletim sistemi dosyalarının nerede bulunduğunu belirlemek için bu değişkenin değerini sorgulayabilir.

PowerShell, desteklenen işletim sistemi platformlarından herhangi birinde ortam değişkenlerine erişebilir ve bu değişkenleri yönetebilir. PowerShell ortam sağlayıcısı, ortam değişkenlerini görüntülemeyi ve değiştirmeyi kolaylaştırarak bu işlemi basitleştirir.

Ortam değişkenleri, PowerShell'deki diğer değişken türlerinden farklı olarak yerel arka plan işleri ve modül üyelerinin çalıştığı oturumlar gibi alt işlemler tarafından devralınır. Bu, ortam değişkenlerini hem üst hem de alt işlemlerde gerekli olan değerleri depolamak için uygun hale getirir.

Ortam değişkenlerini kullanma ve değiştirme

Windows'da ortam değişkenleri üç kapsamda tanımlanabilir:

  • Makine (veya Sistem) kapsamı
  • Kullanıcı kapsamı
  • İşlem kapsamı

İşlem kapsamı, geçerli işlemde veya PowerShell oturumunda kullanılabilen ortam değişkenlerini içerir. Bu değişken listesi üst işlemden devralınır ve Makine ve Kullanıcı kapsamlarındaki değişkenlerden oluşturulur. Unix tabanlı platformlar yalnızca İşlem kapsamına sahiptir.

Ortam sağlayıcısıyla bir değişken söz dizimi kullanarak cmdlet kullanmadan ortam değişkenlerinin değerlerini görüntüleyebilir ve değiştirebilirsiniz. Ortam değişkeninin değerini görüntülemek için aşağıdaki söz dizimini kullanın:

$Env:<variable-name>

Örneğin, ortam değişkeninin WINDIR değerini görüntülemek için PowerShell komut istemine aşağıdaki komutu yazın:

$Env:windir

Bu söz diziminde dolar işareti ($) bir değişkeni, sürücü adı (Env:) ise bir ortam değişkenini ve ardından değişken adını (windir ) gösterir.

PowerShell'de ortam değişkenlerini değiştirdiğinizde, değişiklik yalnızca geçerli oturumu etkiler. Bu davranış, Windows Komut Kabuğu'ndaki komutun Set ve UNIX tabanlı ortamlardaki komutun davranışına Setenv benzer. Machine veya User kapsamlarındaki değerleri değiştirmek için System.Environment sınıfının yöntemlerini kullanmanız gerekir.

Makine kapsamlı değişkenlerde değişiklik yapmak için, ayrıca izinlere sahip olmalıdır. Yeterli izin olmadan bir değeri değiştirmeye çalışırsanız, komut başarısız olur ve PowerShell bir hata görüntüler.

Aşağıdaki söz dizimini kullanarak bir cmdlet kullanmadan değişkenlerin değerlerini değiştirebilirsiniz:

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

Örneğin, ortam değişkeninin Path değerine eklemek ;c:\temp için aşağıdaki söz dizimini kullanın:

$Env:Path += ";c:\temp"

Linux veya MacOS'ta, komuttaki iki nokta üst üste (:), yeni yolu listede kendisinden önceki yoldan ayırır.

$Env:PATH += ":/usr/local/temp"

Ortam değişkenlerinin değerlerini değiştirmek için , Remove-Itemve Copy-Item gibi Set-ItemItem cmdlet'lerini de kullanabilirsiniz. Örneğin, ortam değişkeninin Set-Item değerine eklemek ;c:\temp için cmdlet'ini Path kullanmak için aşağıdaki söz dizimini kullanın:

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

Bu komutta değer parantez içine alınıp birim olarak yorumlanır.

Tercihleri depolayan ortam değişkenleri

PowerShell özellikleri, kullanıcı tercihlerini depolamak için ortam değişkenlerini kullanabilir. Bu değişkenler tercih değişkenleri gibi çalışır, ancak oluşturuldukları oturumların alt oturumları tarafından devralınır. Tercih değişkenleri hakkında daha fazla bilgi için bkz. about_preference_variables.

Tercihleri depolayan ortam değişkenleri şunlardır:

  • PSExecutionPolicyPreference

    Geçerli oturum için ayarlanan yürütme ilkesini depolar. Bu ortam değişkeni yalnızca tek bir oturum için yürütme ilkesi ayarladığınızda bulunur. Bunu iki farklı yolla yapabilirsiniz.

    • Oturum için yürütme ilkesini ayarlamak üzere ExecutionPolicy parametresini kullanarak komut satırından bir oturum başlatın.

    • cmdlet'ini Set-ExecutionPolicy kullanın. Scope parametresini "Process" değeriyle kullanın.

      Daha fazla bilgi için bkz. about_Execution_Policies.

  • PSModuleAnalysisCachePath

    PowerShell, modüller ve cmdlet'leri hakkındaki verileri önbelleğe almak için kullanılan dosya üzerinde denetim sağlar. Önbellek, komut aranırken başlangıçta okunur ve bir modül içeri aktarıldıktan bir süre sonra arka plan iş parçacığına yazılır.

    Önbelleğin varsayılan konumu:

    • Windows PowerShell 5.1:$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • PowerShell 6.0 ve üzeri: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Windows dışı varsayılan: ~/.cache/powershell

    Önbelleğin varsayılan dosya adı şeklindedir ModuleAnalysisCache. PowerShell'in birden çok örneği yüklü olduğunda dosya adı, yükleme başına benzersiz bir dosya adı olması için onaltılık bir sonek içerir.

    Not

    Komut bulma düzgün çalışmıyorsa, örneğin Intellisense var olmayan komutları gösteriyorsa, önbellek dosyasını silebilirsiniz. Önbellek, PowerShell'i bir sonraki başlatışınızda yeniden oluşturulur.

    Önbelleğin varsayılan konumunu değiştirmek için PowerShell'i başlatmadan önce ortam değişkenini ayarlayın. Bu ortam değişkenine yapılan değişiklikler yalnızca alt işlemleri etkiler. Değerin, PowerShell'in dosya oluşturma ve yazma iznine sahip olduğu bir tam yolu (dosya adı dahil) adlandırması gerekir.

    Dosya önbelleğini devre dışı bırakmak için bu değeri geçersiz bir konuma ayarlayın, örneğin:

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

    Bu, NUL cihazının yolunu ayarlar. PowerShell yola yazamıyor, ancak hata döndürülmüyor. İzleme kullanarak bildirilen hataları görebilirsiniz:

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

    Modül çözümleme önbelleğini yazarken, PowerShell gereksiz büyük bir önbellekten kaçınmak için artık mevcut olmayan modülleri denetler. Bazen bu denetimler istenmez, bu durumda bu ortam değişkeni değerini 1olarak ayarlayarak bunları kapatabilirsiniz.

    Bu ortam değişkeninin ayarlanması geçerli işlemde hemen geçerli olur.

  • PSModulePath

    Ortam $env:PSModulePath değişkeni, modülleri ve kaynakları bulmak için aranan klasör konumlarının listesini içerir.

    Varsayılan olarak, etkin konumlara atanmış $env:PSModulePath olan konumlar şunlardır:

    • Sistem genelindeki konumlar: Bu klasörler PowerShell ile birlikte gelen modülleri içerir. Modüller konumunda depolanıyor $PSHOME\Modules . Ayrıca, Bu, Windows yönetim modüllerinin yüklendiği konumdur.

    • Kullanıcı tarafından yüklenen modüller: Bunlar, kullanıcı tarafından yüklenen modüllerdir. Install-Module , modülün geçerli kullanıcı için mi yoksa tüm kullanıcılar için mi yükleneceğini belirtmenize olanak tanıyan bir Scope parametresine sahiptir. Daha fazla bilgi için bkz . Install-Module.

      • Windows'da, kullanıcıya özgü CurrentUser kapsamının $HOME\Documents\PowerShell\Modules konumu klasördür. AllUsers kapsamının konumu şeklindedir$env:ProgramFiles\PowerShell\Modules.
      • Windows olmayan sistemlerde, kullanıcıya özgü CurrentUser kapsamının konumu klasördür $HOME/.local/share/powershell/Modules . AllUsers kapsamının konumu şeklindedir/usr/local/share/powershell/Modules.

    Ayrıca, Program Files dizini gibi diğer dizinlere modül yükleyen kurulum programları, konumlarını değerine $env:PSModulePathekleyebilir.

    Daha fazla bilgi için bkz. about_PSModulePath.

Ortam değişkenlerini yönetme

PowerShell, ortam değişkenlerini yönetmek için birkaç farklı yöntem sağlar.

  • Ortam sağlayıcısı sürücüsü
  • Öğe cmdlet'leri
  • .NET System.Environment sınıfı
  • Windows'ta, Sistem Denetim Masası

Ortam sağlayıcısını kullanma

Her ortam değişkeni System.Collections.DictionaryEntry sınıfının bir örneğiyle temsil edilir. Her DictionaryEntry nesnesinde ortam değişkeninin adı sözlük anahtarıdır. değişkeninin değeri sözlük değeridir.

PowerShell'de ortam değişkenini temsil eden nesnenin özelliklerini ve yöntemlerini görüntülemek için cmdlet'ini Get-Member kullanın. Örneğin, sürücüdeki tüm nesnelerin Env: yöntemlerini ve özelliklerini görüntülemek için şunu yazın:

Get-Item -Path Env:* | Get-Member

PowerShell Ortam sağlayıcısı, bir PowerShell sürücüsündeki (sürücü) ortam değişkenlerine Env: erişmenizi sağlar. Bu sürücü bir dosya sistemi sürücüsüne çok benzer. Sürücüye gitmek için Env: şunu yazın:

Set-Location Env:

Ortam değişkeninin değerlerini almak veya ayarlamak için content cmdlet'lerini kullanın.

PS Env:\> Set-Content -Path Test -Value 'Test value'
PS Env:\> Get-Content -Path Test
Test value

Sürücüdeki Env: ortam değişkenlerini başka bir PowerShell sürücüsünden görüntüleyebilir ve ortam değişkenlerini görüntülemek ve değiştirmek için sürücüye gidebilirsiniz Env: .

Öğe cmdlet'lerini kullanma

Bir ortam değişkenine başvurarak sürücü adını ve ardından değişkenin adını yazın Env: . Örneğin, ortam değişkeninin COMPUTERNAME değerini görüntülemek için şunu yazın:

Get-ChildItem Env:Computername

Tüm ortam değişkenlerinin değerlerini görüntülemek için şunu yazın:

Get-ChildItem Env:

Ortam değişkenleri alt öğelere sahip olmadığından ve Get-ChildItem çıkışı Get-Item aynıdır.

Varsayılan olarak, PowerShell ortam değişkenlerini aldığı sırayla görüntüler. Ortam değişkenleri listesini değişken adına göre sıralamak için komutun çıkışını Get-ChildItem cmdlet'ine yöneltin Sort-Object . Örneğin, herhangi bir PowerShell sürücüsünden şunu yazın:

Get-ChildItem Env: | Sort Name

Ayrıca, cmdlet'ini Env: kullanarak sürücüye Set-Location de gidebilirsiniz:

Set-Location Env:

Sürücüye Env: girdiğinizde, sürücü adını yoldan atlayabilirsiniz Env: . Örneğin, tüm ortam değişkenlerini görüntülemek için şunu yazın:

PS Env:\> Get-ChildItem

Değişkenin değerini COMPUTERNAME sürücünün içinden Env: görüntülemek için şunu yazın:

PS Env:\> Get-ChildItem ComputerName

Ortam değişkenlerindeki değişiklikleri kaydetme

Windows'da bir ortam değişkeninde kalıcı bir değişiklik yapmak için Sistem Denetim Masası kullanın. Gelişmiş Sistem Ayarları'nı seçin. Gelişmiş sekmesinde Ortam Değişkeni...'ye tıklayın. Mevcut ortam değişkenlerini Kullanıcı ve Sistem (Makine) kapsamlarına ekleyebilir veya düzenleyebilirsiniz. Windows bu değerleri Kayıt Defteri'ne yazarak oturumlarda ve sistem yeniden başlatmalarında kalıcı olmasını sağlar.

Alternatif olarak, PowerShell profilinize ortam değişkenleri ekleyebilir veya değiştirebilirsiniz. Bu yöntem desteklenen herhangi bir platformda PowerShell'in herhangi bir sürümü için çalışır.

System.Environment yöntemlerini kullanma

System.Environment sınıfı, değişkenin kapsamını belirtmenize olanak sağlayan GetEnvironmentVariable ve SetEnvironmentVariable yöntemleri sağlar.

Aşağıdaki örnek, makine ayarını PSModulePath almak için GetEnvironmentVariable yöntemini ve değerin yolunu eklemek C:\Program Files\Fabrikam\Modules için SetEnvironmentVariable yöntemini kullanır.

$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')
$newpath = $path + ';C:\Program Files\Fabrikam\Modules'
[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

System.Environment sınıfının yöntemleri hakkında daha fazla bilgi için bkz. Ortam Yöntemleri.

AYRıCA BKZ.