无法在powershell中调用函数

时间:2015-05-28 19:56:08

标签: function powershell

Function.psm1

function split-release {
Param
(
  [string]$Release
)

# Regex to match semantic versioning
if($release -notmatch '\d+[.]\d+[.]\d+')
{
    Write-Error "Invalid Release Number"
}

# Split the version string into an array
$RelVersion=$release.split(".")

@{"Major"=$RelVersion[0];"Minor"=$RelVersion[1];"Patch"=$RelVersion[2]}
}

split.psm1

Import-Module .\Function.psm1
split-release

我将该函数称为

 PS c:\ > .\split.psm1 1.2.3

它不会输出任何输出或错误。

2 个答案:

答案 0 :(得分:2)

当我测试在psm1文件中仅导入该函数时,似乎打印到控制台,并在单独的文件中导入模块,然后将“0.0.0”传递给拆分版本。

.\语法表示所需文件与调用者位于同一目录中。这是你的文件的情况?是否有任何其他代码可能会模糊输出?

其他小问题:

  • Write-Host不会写入您的输出流。在PS中,echo的别名是Write-Output。
  • 您可以使用哈希表将这些作为具有属性的单个对象返回。

修改功能:

function split-release {
    Param
    (
      [string]$Release
    )

    # Regex to match semantic versioning
    if($release -notmatch '\d+[.]\d+[.]\d+')
    {
        Write-Error "Invalid Release Number"
    }

    # Split the version string into an array
    $RelVersion=$release.split(".")

    @{"Major"=$RelVersion[0];"Minor"=$RelVersion[1];"Patch"=$RelVersion[2]}
}

输出:

PS C:/ > $release = "1.2.3"
PS C:/ > $result = split-release -Release $release

PS C:/ > $result.Major
1
PS C:/ > $result.Minor
2
PS C:/ > $result.Patch
3

更多信息:

答案 1 :(得分:0)

我最后尝试了这个,看起来很有效。

File1.psm1
function split-release ($release) {

$RelVersion=$release.split(".")
$Relmajor=$RelVersion[0]
$Relminor=$RelVersion[1]
$Relpatch=$RelVersion[2]
write-host $Relmajor $Relminor $Relpatch
}

File2.ps1
param(
 [string]$release = $(throw "Release number required as script parameter")
)
Import-Module ./File1.psm1
split-release "$release"

最后将其作为PS C运行:\> ./file2.ps1