2011-03-17 66 views
8

最近,我加入了我的企業中的Windows團隊以及我的開發人員背景(通常是Java,.NET和Web),我很快對PowerShell感興趣。我可以看到它對於普通的舊批處理文件VB的價值......這就是爲什麼我想推廣它的用法,並且一點一點地推動人們贊成它,除非有理由不這樣做。如何在企業中使用PowerShell和PowerShell模塊

部署PowerShell似乎非常簡單,因爲我們可以輕鬆批准WSUS中的相關修補程序,並通過GPO爲AD集成服務器配置執行策略。

我的問題其實更多的是關於PowerShell和PowerShell模塊(例如,PCSX,PowerShellPack,自制的......)的分發和使用。

對於那些你誰在你的企業已經部署的PowerShell:

  1. 你有某種標準包裝爲PowerShell和您在每個服務器上部署一組模塊?如果你這樣做,那麼你如何部署新版本的已安裝模塊?

  2. 您是否將中央PowerShell存儲庫放置在您存儲所有PowerShell模塊的位置?如果是這樣,該存儲庫是全局可訪問還是您也同步的輔助存儲庫?

    我非常習慣於像Maven,Ivy和其他依賴管理軟件這樣的工具,這就是爲什麼我對PowerShell在這方面提供什麼有點失望。

    我找到了a very nice article about this subject,可能會走相同的路徑,因爲它符合我的要求。

  3. 你使用WinRM嗎?你是直接從工作站連接還是你有中央管理服務器?您是否將WinRM的訪問權限限制在這些管理服務器上?

  4. 您是否在非託管環境中使用WinRM(服務器不在AD域中)?你如何配置WinRM?

    我們有一個網絡區域,其中的服務器不是AD域的一部分,因此我不能依賴於Kerberos身份驗證的WinRM。

  5. 全球範圍內,您的經驗是什麼,您對結果滿意嗎?

編輯: 關於第二個問題,我們已經決定把中央存儲庫到位。

這個想法將有一個主版本庫,它將在版本控制(GIT)下,並且我們將成爲唯一擁有寫入權限的版本庫。

從該存儲庫中,我們將使用類似rsync的工具(在我們的例子中將是robocopy)將模塊複製到其他輔助存儲庫(它將是隻讀副本)。只有那些存儲庫可以被客戶端訪問(我們只需要更新這些客戶端上的PSModulePath以確保他們可以訪問存儲庫)。

我們也將階段我們的版本,因此在存儲庫,將有多個版本可用:開發,集成和生產。

+1

在使用包含Perl Package Manager的Perl之後,我分享了您對PowerShell內置的模塊分發管道缺乏的失望。事實上,我會把它作爲V3的第一個功能請求。 – 2011-03-17 12:18:04

+0

我完全同意你乍得。如果微軟可以將像CPAN這樣的在線模塊庫放到Perl中,或者Maven Central for Java,那麼它肯定會幫助PowerShell社區。 +1點,如果他們提出一個企業(最好是免費的)工具:) – dSebastien 2011-03-30 19:11:10

回答

8

讓我們按類別討論每個問題。

福音

要開始在PowerShell中感興趣的你的同事,我建議出發與麪包和自動化的黃油。找到一個比較容易實現的常見問題(快速在同事面前獲取某些內容)並使用PowerShell自動執行。然後從那裏展開。

另一個好主意是在你的辦公室開始一個「腳本俱樂部」,你可以在PowerShell中進行一些培訓並分享有關腳本的想法或問題。你可以每隔幾周開始一次,看看它是如何發展的。在我的工作中,我們有一個圖書俱樂部,我們閱讀各種有關測試,設計和編程的技術書籍,它運作良好。

包裝

  • 模塊 - PowerShell模塊是包裝的最佳形式。它們非常易於使用,並提供一些很好的功能,例如易於部署和私有變量/功能。
  • 腳本 - 腳本是正在進行或開始的好主意,因爲您的同事肯定會習慣腳本。

部署

有幾個選項目前部署。

  • 部署到每一臺機器 - 這可能避免一些網絡問題,併爲您提供了每臺機器更大的靈活性,但不足之處是,更新模塊可能更多的是痛苦的。
  • 中央存儲庫(又名網絡共享) - 您也可以將所有模塊存儲在中央網絡共享中。這樣可以避免部署到每臺計算機時出現的問題,並且如果要控制修改,則可以使模塊爲只讀模式。但是,您仍然必須將配置文件部署到每臺計算機,以便將該網絡共享添加到變量$ env:PSModulePath變量。最好在all-users-all-hosts配置文件中進行設置。從那時起,除非路徑改變,否則不需要更新它。
  • NuGet - NuGet是一個開源項目,將包管理引入.NET開發。它有什麼好處是有公共存儲庫和本地/私有存儲庫的能力。 PowerShell module已有initial version,它將利用NuGet進行PowerShell模塊部署。

遠程訪問

作爲一個構建工程師,我有相對較少的機器並超過他們完全控制。所以我啓用了遠程處理。你將不得不問一些IT人員更好的建議。

+0

+1好答案。我會補充說,NuGet for PowerShell是非常新的,你引用的代碼只出現了一個月。我們有辦法解決有關部署的問題。 – 2011-03-17 18:40:16

+0

感謝您的回答,非常感謝!當我有一些時間來處理它時,我會嘗試給NuGet一個嘗試。我在這個問題上開始賞金,看看我能否對所有這些問題有更多的看法。 – dSebastien 2011-03-23 10:03:35

+0

您不必部署模塊來修改PSModulePath環境變量 - 這就是爲什麼它是一個環境變量;) – Jaykul 2011-03-24 17:55:55