我是PowerShell的新手,并尝试使用发布here(script 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
正常工作?
答案 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}
或者您可以创建别名(如其他答案所示)