2009-06-18 79 views
44

(我不敢相信我實際上在問這個問題,但我一天的腦力都沒有了。)PowerShell腳本的放置位置?

我剛剛寫了第一篇嚴肅的PowerShell腳本,我對它很滿意。我打算每天都使用它。我希望能夠從Posh命令行中調用它。我會給它一個動詞 - 名詞類型的名字,但是現在它只是一個簡單的.ps1,而不是那些帶有參數等的高級函數。

那麼,它應該去,我怎麼把它從辣妹命令行?我計劃寫更多!他們應該去哪裏?

  • 它應該是在我的個人資料的功能?
  • 它應該繼續我的道路嗎?
  • 是否在PSMODULEPATH去了?無論如何,那裏有什麼東西?它是遞歸地看起來還是像正常的PATH一樣?

你們都把你的PowerShell腳本放在哪裏,你如何組織它們?我有很多製作C#和C++工具的經驗,並且知道如何命名它們以及將它們放在哪裏。而在另一個極端,我做了很多蹩腳的.bat文件,這些文件通常是獨立的,或堆在某個文件夾的堆中。但PowerShell似乎非常不同。您可以非常快速地製作糟糕的.bat文件類型的東西,或者您可以使用它構建庫和複雜的服務。

我真的很喜歡,我應該如何開始我開始之前,舉辦這些事情的一些想法。顯然,每個人都不一樣,所以我希望有一些討論。謝謝!

回答

23

我把我自己編寫的腳本在同一文件夾作爲我的個人資料。然後我可以將它們一起備份到&版本。我的個人資料開頭爲:

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

使用$ script:MyInvocation.MyCommand.Path,請參閱[執行腳本的源路徑](http://stackoverflow.com/questions/801967/how-can-i-find-the-source-path-of -an執行的腳本/ 6985381#6985381)。即使使用配置文件腳本,你也會遇到嵌套調用者的問題,例如我有一個輔助函數來重新加載配置文件(在函數/變量編輯之後),但跳過所有的一次性init(如加載.NET程序集)。 – yzorg 2012-05-31 18:32:13

8

我的建議: - 將腳本存儲在目錄中,如你所願,如C:\豪華 - 目錄添加到$ ENV:路徑

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

這將確保您可以在其他目錄,比如C:\ WINDOWS,但你可以調用腳本

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

如果您的文件sample.ps1包含函數的定義,你每次導入它,那麼我會考慮加入這一行到$配置文件

. c:\posh\sample.ps1 

關於腳本組織..只是SE根據腳本:)個人,開發,外部的目的veral迪爾斯(下載),樣品,...

12

使用V2,您可以在配置文件所在的WindowsPowerShell目錄中創建模塊目錄。當您運行導入模塊時,PS將自動查找該目錄以加載模塊。我在WindowsPowerShell下創建了一個「腳本」目錄,這是模塊的兄弟目錄。

我用我的個人資料來設置使用變量用下面的代碼一些目錄:

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

這也是我所做的。雖然我還有一個「庫」目錄,其中包含我的配置文件自動執行以定義全局函數的腳本。我在PowerShell v1中做到了這一點,我可能會最終用Module取代所有這些。 – JasonMArcher 2009-06-28 00:02:29

7

這是我做的:

注:替身「模塊名」爲有意義的事。

創建一個模塊並將其保存在全局模塊文件夾中作爲 「C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ ModuleName \ ModuleName.psm1」。例如:

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

Export-ModuleMember -function FancyFunction 

打開PowerShell配置文件,並添加以下行,以確保您的模塊被加載每次啓動PowerShell會話時間:

Import-Module ModuleName -Force 

您可以通過鍵入easiliy找到你的PowerShell配置文件:

notepad $profile 

當你打開一個新的PowerShell會話,你應該能夠從控制檯或其他腳本調用你的函數,而無需做任何事情ELS即