2011-03-17 65 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