加载powershell脚本可随时调用

时间:2012-02-01 23:01:03

标签: powershell powershell-v2.0

我是PowerShell的新手,并尝试使用发布herescript itself)的示例脚本来计算文件哈希值。我可以使用点符号

来使其工作
. 'E:\Tools\Power Shell Scripts\Get-FileHash.ps1' E:\testfile.bin

然而,我希望能够像作者一样使用它,只需输入

即可
Get-Filehash E:\testfile.bin

我发现我可以做到

function Get-FileHash {. 'E:\Tools\Power Shell Scripts\Get-FileHash.ps1'}

但是行为不正确,我在Get-Filehash E:\testfile.bin

时会提示我输入文件

我需要在配置文件脚本中放置什么才能正确加载此脚本并Get-Help Get-FileHash正常工作?

3 个答案:

答案 0 :(得分:10)

实际上,这种情况下的最佳做法是将函数放在模块而不是脚本中。听起来有点不祥,所有这意味着将包含文件从.ps1扩展名重命名为.psm1扩展名,然后将其存储在您的文档目录(...\Documents\WindowsPowerShell\Modules\<Name>\<Name>.psm1)下{{1}是文件的基本名称。

然后使用以下命令加载模块:

<Name>

加载后,您可以调用模块中包含的函数 Get-Help也会识别命令。除其他外,模块提供封装,因此一个文件不会污染另一个文件的上下文空间。 顺便说一句,您不需要在C#中编写cmdlet;您也可以在PowerShell中编写它们。举例来说,看看我的open-source PowerShell library,它全部用PowerShell编写,并包含Import-Module Name 识别的大量帮助。

要真正获得使用函数和模块的全部好处还有很多要知道的东西 - 我在Simple-Talk.com上引用您的文章Down the Rabbit Hole-A Study in PowerShell Pipelines, Functions, and Parameters

答案 1 :(得分:5)

你可以这样做:

Set-Alias Get-Filehash "E:\Tools\Power Shell Scripts\Get-FileHash.ps1"

答案 2 :(得分:4)

将脚本所在的目录放在executable PATH (i.e. the PATH environment variable).

BTW,你的函数包装器解决方法不起作用,因为你没有将参数传递给脚本:

function Get-FileHash {. 'E:\Tools\Power Shell Scripts\Get-FileHash.ps1' $args}

或者您可以创建别名(如其他答案所示)