about_Functions_OutputTypeAttribute

Aplica-se a: Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TÓPICO

about_Functions_OutputTypeAttribute

DESCRIÇÃO BREVE

Descreve um atributo que informa o tipo de objeto que a função retorna.

DESCRIÇÃO LONGA

O atributo OutputType lista os tipos .NET de objetos que retornam as funções. Você pode usar seu parâmetro ParameterSetName opcional para listar diferentes tipos de saída para cada conjunto de parâmetros.

O atributo OutputType é suportado em funções simples e avançadas. É independente do atributo CmdletBinding.

O atributo OutputType fornece o valor da propriedade OutputType do objeto System.Management.Automation.FunctionInfo que o cmdlet Get-Command retorna.

O valor do atributo OutputType é apenas uma nota de documentação. Não é derivado do código de função ou comparado com a saída real da função. Como tal, o valor pode ser impreciso.

SINTAXE

O atributo OutputType funções tem a seguinte sintaxe:

        [OutputType([<TypeLiteral>], ParameterSetName="<Name>")]
        [OutputType("<TypeNameString>", ParameterSetName="<Name>")]

O parâmetro ParameterSetName é opcional.

Você pode listar vários tipos no atributo OutputType.

        [OutputType([<Type1>],[<Type2>],[<Type3>])]

Você pode usar o parâmetro ParameterSetName para indicar que outro parâmetro define tipos diferentes de retorno.

        [OutputType([<Type1>], ParameterSetName="<Set1>","<Set2>")]
        [OutputType([<Type2>], ParameterSetName="<Set3>")]

Coloque as declarações de atributo OutputType na lista de atributos que precede a instrução Param.

O exemplo a seguir mostra o posicionamento do atributo OutputType em uma função simples.

        function SimpleFunction2
        {
    [OutputType([<Type>])]
            Param ($Parameter1)

            <function body>
        }

O exemplo a seguir mostra o posicionamento do atributo OutputType em funções avançadas.

       function AdvancedFunction1
       {
           [OutputType([<Type>])]
           Param (      
               [parameter(Mandatory=$true)]
               [String[]]
               $Parameter1  
           )     
                  
         <function body>
       }
       function AdvancedFunction2
       {
           [CmdletBinding(SupportsShouldProcess=<Boolean>)]
           [OutputType([<Type>])]
           Param (      
               [parameter(Mandatory=$true)]
               [String[]]
               $Parameter1  
           )     
                  
         <function body>
       }

EXEMPLOS

A função a seguir usa o atributo OutputType para indicar que ele retorna um valor de cadeia de caracteres.

        function Send-Greeting
        {
          [OutputType([String])]   
          Param ($Name)

          Hello, $Name      
        }

Para ver a saída resultante para a propriedade do tipo, use o cmdlet Get-Command.

        PS C:\> (Get-Command Send-Greeting).OutputType

        Name                                               Type                                                                                                     
        ----                                               ----                                                                                                     
        System.String                                      System.String        

                                                                                    

A seguinte função avançada usa o atributo OutputType para indicar que a função retorna tipos diferentes, dependendo do conjunto de parâmetros usado no comando da função.

       function Get-User
       {
           [CmdletBinding(DefaultParameterSetName="ID")]

           [OutputType("System.Int32", ParameterSetName="ID")]
           [OutputType([String], ParameterSetName="Name")]

           Param (      
               [parameter(Mandatory=$true, ParameterSetName="ID")]
               [Int[]]
               $UserID,

               [parameter(Mandatory=$true, ParameterSetName="Name")]
               [String[]]
               $UserName
           )     
                  
         <function body>
       }

O exemplo a seguir demonstra que o valor de propriedade do tipo de saída exibe o valor do atributo OutputType, mesmo quando não estiver correto.

A função Get-Time retorna uma cadeia de caracteres que contém a forma abreviada do tempo de qualquer objeto DateTime. No entanto, o atributo OutputType informa que ele retorna um objeto System. DateTime.

        function Get-Time
        { 
            [OutputType([DateTime])]
            Param
            (
               [parameter(Mandatory=$true)]
               [Datetime]$DateTime       
            )
            $DateTime.ToShortTimeString()
        }  

O método Get-Type confirma que a função retorna uma cadeia de caracteres.

        PS C:\> (Get-Time -DateTime (Get-Date)).Gettype().FullName
        System.String

No entanto, a propriedade OutputType, que obtém o valor do atributo OutputType, informa que a função retorna um objeto DateTime.

        PS C:\> (Get-Command Get-Time).OutputType

        Name                                      Type                                                                                                     
        ----                                      ----                                                                                                     
        System.DateTime                           System.DateTime

OBSERVAÇÕES

O valor da propriedade OutputType de um objeto FunctionInfo é uma matriz de objetos System.Management.Automation.PSTypeName, cada um dos quais possuindo as propriedades Name e Type.

Para obter somente o nome de cada tipo de saída, use um comando com o seguinte formato.

        (Get-Command Get-Time).OutputType | ForEach {$_.Name}

O valor da propriedade OutputType pode ser nulo. Use um valor nulo quando a saída não for um tipo .NET, como em um objeto WMI ou uma exibição formatada de um objeto.

CONSULTE TAMBÉM

about_Functions

about_Functions_Advanced

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute