【问题标题】:Combine Powershell Scripts into a module将 Powershell 脚本组合到一个模块中
【发布时间】:2013-05-16 20:26:20
【问题描述】:

我有六个具有相关功能的 powershell 脚本(.ps1 文件)。有没有一种简单的方法可以将它们组合成一个模块,以便我可以像普通 CmdLets 一样调用它们?

例如,而不是运行:

PS> ./get-somedata.ps1 -myParams x

我可以导入模块并编写:

PS> get-somedata -myParams x

【问题讨论】:

    标签: powershell powershell-3.0 powershell-module


    【解决方案1】:

    您应该创建一个脚本模块。首先,把你的脚本变成函数(这样你在调用它们时可以跳过.\)。这就像将脚本内容包装在函数脚本块中一样简单。例如。

    get-somedata.ps1

    $data = get-childitem -filter *.doc
    $data | ft -autosize
    

    变成了。

    get-somedata.ps1

    function get-somedata {
        $data = get-childitem -filter *.doc
        $data | ft -autosize
    }
    

    然后您可以创建一个包含所有新函数的 *.psm1 文件,或者创建一个运行单独脚本的 *.psm1 文件(因为它们现在包装在函数脚本块中,函数将被导入而不是运行当您运行脚本文件时)。如果您想对名称、文件列表、版本等进行更多控制,您可以创建一个模块清单。上面的链接解释了其中的一部分。

    查看this link

    【讨论】:

      【解决方案2】:

      有多种选择。

      将您的脚本放在 $env:Path 的文件夹中或将您的脚本文件夹添加到 $env:Path。您也不需要指定 .ps1

      将您的脚本转换为函数并将它们添加到您的配置文件脚本 ($profile)。此脚本在 powershell 启动时运行。您还可以在配置文件中使用您的函数dot source您的脚本。

      将您的脚本转换为函数并将它们添加到module。不要忘记在使用前导入你的模块。您可以在您的 powershell 配置文件中执行此操作,因此每次启动 powershell 时都会执行此操作。或者使用可以自动加载模块的powershell v3。然后确保您的模块位于$PSModulePath 的文件夹之一中。

      【讨论】:

        【解决方案3】:

        嗯,我想做同样的事情,不想创建一个庞大的模块文件。 (因为我经常编辑我的文件)

        所以这就是我所做的。丑陋但效果很好!完成是几秒钟。

        $Module = c:\users\<username>\documents\windowspowershell\module\mycustommodule\mycustommodule.psm1
        #Added so when I make changes to scripts I can easily rebuild the module file.
        Clear-content $module
        
        $Scripts = c:\<scriptfolder>
        $FileList = gci $Scripts
        
        foreach ($File in $FIleList) 
        {   $name = $File.basename
            $OpenFunction = "`n`n`n`n Function $Name { `n"
            $CloseFunction = "`n}"
            add-content $openfunction -path $module    
            $File | get-content | add-content -path $module
            add-content $closefunction -path $module
        }
        

        现在你可以 import-module mycustommodule

        并调用与原始脚本同名的函数之一。 :-)

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 2014-01-07
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        相关资源
        最近更新 更多