将Powershell脚本合并到一个模块中

时间:2013-05-16 20:26:21

标签: powershell powershell-v3.0 powershell-module

我有半打的PowerShell脚本(.ps1文件)都有相关的功能。有没有一种简单的方法可以将它们组合成一个模块,以便我可以将它们称为普通的CmdLets?

例如,正在运行:

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

我可以导入模块并写:

PS> get-somedata -myParams x

3 个答案:

答案 0 :(得分:2)

您应该创建一个脚本模块。首先,将脚本转换为函数(这样您可以在调用它们时跳过.\)。这与将脚本内容包装在函数scriptblock中一样简单。实施例

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

答案 1 :(得分:1)

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

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

$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
}

现在你可以导入模块mycustommodule

并调用一个与原始脚本具有相同名称的函数。 : - )

答案 2 :(得分:0)

有几种选择。

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

将脚本转换为函数并将其添加到配置文件脚本($ profile)。当PowerShell启动时,此脚本将运行。您还可以在个人资料中使用您的功能dot source脚本。

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

的其中一个文件夹中