代码之家  ›  专栏  ›  技术社区  ›  Junaid

PowerShell使用第三方模块而不安装它

  •  6
  • Junaid  · 技术社区  · 8 年前

    我相信这是可能的,但找不到任何有用的东西。 我写了一个局域网扫描脚本。为了尽可能实现自动化,我不依赖用户的任何输入。该脚本检查本地接口IP地址,并使用缩进网络工具模块计算可能的IP地址数和每个地址的ping数。

    问题是,由于我使用的是第三方工具,因此我必须将其安装在任何要使用此脚本的机器上。有没有办法将此第三方模块与我的脚本包括在一起,就像将它们放在同一文件夹中一样,而不必单独安装?

    1 回复  |  直到 8 年前
        1
  •  7
  •   qbik    8 年前

    这实际上取决于您希望如何将模块部署到其他机器。如果您想在网络共享上共享它或分发zip包,那么可以将这些依赖项与模块一起包含。就放进去 Indented.Common Indented.NetworkTools 在一个包含脚本定义的目录中,如下所示:

    MyModule/
    └╴MyModule.psm1
    └╴Indented.Common/
    └╴IndentedNetworkTools/
    

    然后,您可以直接从 MyModule.psm1 (不将它们安装到全局模块路径):

    import-module $psscriptroot\Indented.Common\Indented.Common.psm1
    import-module $psscriptroot\Indented.NetworkTools\Indented.NetworkTools.psm1
    

    就这样。如果你有一个正常的 .ps1磅/平方英寸 ,不是 单元

    也许更优雅的方式是使用 WMF5 PackageManagement 声明 中的作为依赖项(NestedModules) MyModule.psd1 然后 publish it on PSGallery 然后,你可以说 Install-Module MyModule 在其他计算机上-这将安装 MyModule 这是依赖关系。

    这种方法的问题是,任何声明的依赖项都必须在PowershellGallery上可用( Indented.* 模块不是)。