将函数的结果返回到运行时脚本

时间:2015-12-09 06:57:35

标签: powershell

我有两个powershell脚本,一个具有检查变量值的功能" name"它作为参数传递。如果它与“John”不匹配,则结果为2,否则,结果为0(包含在函数中)。

这是函数脚本:

Function test {

    Param (
        $name = $(throw "need -name"),
        $result = 0         
    )

    Process {
        if($name -ne "John") {
            Write-Host "Name is incorrect"
            $result = 2 
        } else {
            Write-Host "Student is correct"
        }
    }  
}

第二个脚本调用此函数并以 -

运行
Import-Module C:\function.ps1
test -name Sandra

现在我想将结果(或状态)返回到函数的第二个脚本中,并根据结果在第二个脚本中添加更多条件。要实现此目的,脚本或函数需要进行哪些更改?

2 个答案:

答案 0 :(得分:3)

好像你是PowerShell的新手,所以这里有一些提示:

  1. 您应该使用Approved Verbs e。 G。改变你的功能 名称为Test-StudentName
  2. language integrated support for parameter handling
  3. Using Write-Host is almost always wrong
  4. 所以你的脚本看起来像这样:

    function Test-StudentName
    {
        [CmdletBinding()]
        [OutputType([int])]
        Param
        (
            [Parameter(Mandatory=$true, Position=0)]
            [ValidateNotNullOrEmpty()]
            [string]
            $Name
        )
    
        if ($name -ne 'John') 
        {
            Write-Output 2
        }
        else
        {
            Write-Output 0
        }
    }
    

答案 1 :(得分:1)

<#
.Synopsis
   Short description
.DESCRIPTION
   Long description
.EXAMPLE
   Example of how to use this cmdlet
.EXAMPLE
   Another example of how to use this cmdlet
#>
function Test-Name
{
    [CmdletBinding()]
    [Alias()]
    [OutputType([int])]
    Param
    (
        # Parameter Name help description
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [string]
        $Name
    )

    Begin
    {
    }
    Process
    {

        if($name -ne "John") {
            Write-Host "Name is incorrect"
            2 
        }
        else {
            Write-Host "Student is correct"
            0
        }
    }
    End
    {
    }
}

然后你&#34;点源&#34;

Windows PowerShell
Copyright (C) 2015 Microsoft Corporation. All rights reserved.

PS C:\Users\joshua> cd .\Desktop\
PS C:\Users\joshua\Desktop> . .\Test-Name.ps1
PS C:\Users\joshua\Desktop> Test-Name -Name Sandra
Name is inccorrect
2

&#34;点源&#34;部分是&#34;。 \试验Name.ps1&#34 ;.或者你可以将文件保存为.psm1 - 这将是创建模块最简单的方法 - 并导入它

PS 虽然在powershell版本5中没有那么多,但强烈建议不要使用Write-Host