2009-06-18 18 views
44

(Aslında bunu sorduğuma inanamıyorum, ama gün için beyin gücüm tükeniyor.)PowerShell komut dosyaları nereye yerleştirilir?

Sadece ilk ciddi PowerShell betiğimi yazdım ve gerçekten çok mutluyum. Her gün kullanmayı düşünüyorum. Posh komut satırından onu aramak istiyorum. Ben bir fiil-isim tür adı vereceğim, ama şimdilik basit bir .ps1 ve param ve benzeri bu fantezi gelişmiş fonksiyonlardan biri değil.

Peki nereye gitmeli ve onu bir Posh komut satırından nasıl arayabilirim? Daha fazla yazmayı planlıyorum! Nereye gitmeli?

  • Profilimde bir işlev mi olmalı?
  • Yolumu devam etmeli mi?
  • PSMODULEPATH içeriyor mu? Orada ne tür şeyler oluyor? Yinelemeli mi görünüyor yoksa normal PATH gibi mi?

PowerShell komut dosyalarınızı nereye koyarsınız ve bunları nasıl düzenlersiniz? C# ve C++ araçlarını kullanarak çok fazla deneyime sahibim ve onları nasıl adlandıracağımızı ve nereye koyacağımı biliyorum. Ve diğer ucunda ben genellikle tek başına veya bir klasörde bir yığın halinde kazık bir sürü crappy .bat dosyaları yaptım. Ancak PowerShell çok farklı görünüyor. Çok hızlı bir şekilde crappy .bat dosya türünde şeyler yapabilir, ya da kütüphaneleri ve gelişmiş hizmetleri onunla oluşturabilirsin.

Başlamadan önce bu şeyleri düzenlemeye nasıl başlamalıyım konusunda bazı fikirleri çok isterim. Açıkçası herkes farklıdır, bu yüzden bir tartışma yapmayı umuyorum. Teşekkürler!

cevap

23

Kişisel scriptlerimi profilimle aynı klasöre koyarım. Daha sonra & versiyonunu birlikte yedekleyebilirim. V2 ile

$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path) 
$env:path += ";$ProfileRoot" 
+1

$ script'i kullanın: MyInvocation.MyCommand.Path, [yürütme komut dosyasının kaynak yoluna bakın] (http://stackoverflow.com/questions/801967/how-can-i-find-the-source-path-of -an-yürütme-script/6985381 # 6985381). Profil komut dosyasıyla bile iç içe geçmiş arayanlarla sorun yaşarsınız, örneğin profilinizi yeniden yüklemek için bir yardımcı işlevim vardır (işlev/değişken düzenlemelerinden sonra) ancak tüm bir kerelik init'i atlar (.NET derlemeleri yüklemek gibi). – yzorg

8

Önerilerim: - Komut dosyasını istediğiniz gibi dizinde saklayın, örn. c: \ lüks - $ env dizin ekleyin: \ windows, ancak komut dosyası

[c:\windows] > sampl[TAB] # it expands the name of file to sample.ps1, then hit enter 

çağırabilir: yol Bu, diğer dizinde olabilir olmasını sağlar

$env:path += ";c:\posh" 

, c demek dosya sample.ps1 fonksiyonları tanımlarını içerir ve bunu her zaman içe, o zaman .. komut Organizasyonla ilgili sizin $ profil dosyası

. c:\posh\sample.ps1 

bu satırı ekleyerek sadece se dikkate alacağını komut dosyalarının amacına göre veral dirs :) Kişisel, dev, harici (indirilen), örnekler, ...

12

, profil olduğunu WindowsPowerShell dizininde bir modül dizini oluşturabilirsiniz: My profile ile başlar. PS, içe aktarma modülünü çalıştırdığınızda modülleri yüklemek için o dizine otomatik olarak bakar. WindowsPowerShell altında bir "Scripts" dizini oluşturdum, bu da Modules'in bir kardeş dizisidir.

Aşağıdaki kod ile değişkenleri kullanarak bazı dizinleri ayarlamak için profilimi kullanın:

not:: yerine "modulename" anlamlı bir şey için

PS> cat $Profile 
$scripts = "$(split-path $profile)\Scripts" 
$modules = "$(split-path $profile)\Modules" 
$docs = $(resolve-path "$Env:userprofile\documents") 
$desktop = $(resolve-path "$Env:userprofile\desktop") 

PS> cat variable:\scripts 
C:\Users\andy.schneider\Documents\WindowsPowerShell\Scripts 

PS> cat variable:\modules 
C:\Users\andy.schneider\Documents\WindowsPowerShell\Modules 
+0

Bu benim de yaptığım şey. Yine de, profilimin otomatik olarak global işlevleri tanımlamak için çalıştırdığı komut dosyalarının bulunduğu bir "Kütüphaneler" dizinim var. Bunu PowerShell v1'de yaptım, muhtemelen hepsini Modüller ile değiştireceğim. – JasonMArcher

7

Bu benim işim.

Bir modül oluşturun ve genel modüller klasörüne "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ ModuleName \ ModuleName.psm1" olarak kaydedin. örneğin:

function global:FancyFunction() { 
    # do something interesting here. 
} 

Export-ModuleMember -function FancyFunction 

sizin Powershell Profilinizi açın ve modül bir powershell oturumu başlatmak her zaman yüklenmiş olduğundan emin olmak için aşağıdaki satırı ekleyin:

Import-Module ModuleName -Force 

Sen yazarak Powershell profili bulun kolay yolunabilmesi edebilirsiniz : yeni powershell oturumu açtığınızda, hiçbir şey els yapmak zorunda kalmadan konsolu veya diğer komut adresinin işlevi çağırmak mümkün olmalıdır

notepad $profile 

e.

İlgili konular