none
Crear método y llamarlo RRS feed

  • Pregunta

  • Estimados:

    Soy nuevo en lo que respecta al mundo de PowerShell no así en el mundo de JAVA. Estoy haciendo un script y quiero hacerlo con el menor código posible. Mi pregunta es la siguiente... En PowerShell es posible crear un método y llamarlo... Este es mi código:

    switch($var){
        1 {
    #
    Write-Host -foregroundcolor yellow -object "Ingrese Nombre: " -NoNewline
    $FirstName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese Apellidos: " -NoNewline
    $LastName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese nombre para mostrar: " -NoNewline
    $DisplayName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese direccion de correo principal: " -NoNewline
    $UPN = Read-Host
    #
    New-MsolUser -DisplayName $DisplayName -FirstName $FirstName -LastName $LastName -UserPrincipalName $UPN -UsageLocation CL -LicenseAssignment XXXXXXXX:EXCHANGEDESKLESS}
        2 { #
    Write-Host -foregroundcolor yellow -object "Ingrese Nombre: " -NoNewline
    $FirstName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese Apellidos: " -NoNewline
    $LastName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese nombre para mostrar: " -NoNewline
    $DisplayName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese direccion de correo principal: " -NoNewline
    $UPN = Read-Host
    #
    New-MsolUser -DisplayName $DisplayName -FirstName $FirstName -LastName $LastName -UserPrincipalName $UPN -UsageLocation CL -LicenseAssignment XXXXXX:YYYYYYYYYYYYYYY}
    }
        3 {"File is write protected"}
        default {"Invalid entry"}
    }

    Lo que me gustaría hacer es crear un método en donde tenga solamente:

    #
    Write-Host -foregroundcolor yellow -object "Ingrese Nombre: " -NoNewline
    $FirstName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese Apellidos: " -NoNewline
    $LastName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese nombre para mostrar: " -NoNewline
    $DisplayName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese direccion de correo principal: " -NoNewline
    $UPN = Read-Host
    #
    New-MsolUser -DisplayName $DisplayName -FirstName $FirstName -LastName $LastName -UserPrincipalName $UPN -UsageLocation CL -LicenseAssignment XXXXXXXX:EXCHANGEDESKLESS}

    Ya que será lo que se repetirá en en todos los casos del Switch...  Lo que pretendo es dejar el Script de esta forma:

    $Metodo{

    #
    Write-Host -foregroundcolor yellow -object "Ingrese Nombre: " -NoNewline
    $FirstName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese Apellidos: " -NoNewline
    $LastName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese nombre para mostrar: " -NoNewline
    $DisplayName = Read-Host
    #
    Write-Host -foregroundcolor yellow -object "Ingrese direccion de correo principal: " -NoNewline
    $UPN = Read-Host
    #

    }

    switch($var){
        1 {$Metodo
    New-MsolUser -DisplayName $DisplayName -FirstName $FirstName -LastName $LastName -UserPrincipalName $UPN -UsageLocation CL -LicenseAssignment XXXXXXXX:EXCHANGEDESKLESS}
       

        2 {$Metodo
    New-MsolUser -DisplayName $DisplayName -FirstName $FirstName -LastName $LastName -UserPrincipalName $UPN -UsageLocation CL -LicenseAssignment XXXXXX:YYYYYYYYYYYYYYY}
    }
        3 {"File is write protected"}
        default {"Invalid entry"}
    }

    lunes, 23 de enero de 2017 19:07

Respuestas

  • Hola,

    Te pongo un ejemplo sobre como haría lo que preguntas:

    [CmdletBinding()]
    Param
    (
    	[Parameter(Mandatory=$True,
      		Position = 0,
    		HelpMessage = "License Assignment Type")]
    	[ValidateSet("1","2","3")]
      	[int]$LicenseAssignmentType
    )
    Clear-Host
    $Error.Clear()
    Function Get-Data
    {
    	[CmdletBinding()]
    	Param()
    	Begin
    	{
    		Write-Verbose "Obteniendo datos..."
    	}
    	Process
    	{
    		$First = Read-Host -Prompt "Ingrese Nombre"
    		$Last = Read-Host -Prompt "Ingrese Apellidos"
    		$Display = Read-Host -Prompt "Ingrese nombre para mostrar"
    		$Mail = Read-Host -Prompt "Ingrese direccion de correo principal"
    		$Data = New-Object PSObject -Property @{ 
    			FirstName = $First
    			LastName = $Last
    			DisplayName = $Display
    			UPN = $Mail
    		}
    		Return $Data
    	}
    } 
    $UserData = Get-Data
    Switch ($LicenseAssignmentType)
    {
    	1 
    		{
    			Write-Output "Licencia tipo 1"
    			$LicenseAssignment = "XXXXXXXX:EXCHANGEDESKLESS"
    		}
    	2
    		{
    			Write-Output "Licencia tipo 2"
    			$LicenseAssignment = "XXXXXX:YYYYYYYYYYYYYYY"
    		}
    	3
    		{
    			Write-Output "Licencia tipo 3"
    			Write-Error "File is write protected"
    		}
    	
    }
    
    Write-Output "Creando Usuario..."
    Write-Output ("	DisplayName: " + $UserData.DisplayName)
    Write-Output ("	FirstName: " + $UserData.FirstName)
    Write-Output ("	LastName " + $UserData.LastName)
    Write-Output ("	UserPrincipalName: " + $UserData.UPN)
    Write-Output ("	LicenseAssignment: " + $LicenseAssignment)
    New-MsolUser -DisplayName $UserData.Displayname -FirstName $UserData.FirstName -LastName $UserData.LastName -UserPrincipalName $UserData.UPN -UsageLocation CL -LicenseAssignment $LicenseAssignment
    
    

    Obviamente se pueden hacer muchas variantes, como por ejemplo integrar el switch para el tipo de licencia en la propia función de obtención de datos, pero lo he puesto así por si te resultaba mas legible.

    Espero que te sirva.

    Un saludo.

    Diego
    • Marcado como respuesta Pablo Galarce martes, 24 de enero de 2017 18:22
    martes, 24 de enero de 2017 16:54

Todas las respuestas

  • Hola:

    Aquí dice algo.

    http://freyes.svetlian.com/pstipos.htm

    Saludos.


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Pablo Galarce martes, 24 de enero de 2017 15:14
    • Desmarcado como respuesta Pablo Galarce martes, 24 de enero de 2017 18:22
    martes, 24 de enero de 2017 1:24
  • Hola,

    Te pongo un ejemplo sobre como haría lo que preguntas:

    [CmdletBinding()]
    Param
    (
    	[Parameter(Mandatory=$True,
      		Position = 0,
    		HelpMessage = "License Assignment Type")]
    	[ValidateSet("1","2","3")]
      	[int]$LicenseAssignmentType
    )
    Clear-Host
    $Error.Clear()
    Function Get-Data
    {
    	[CmdletBinding()]
    	Param()
    	Begin
    	{
    		Write-Verbose "Obteniendo datos..."
    	}
    	Process
    	{
    		$First = Read-Host -Prompt "Ingrese Nombre"
    		$Last = Read-Host -Prompt "Ingrese Apellidos"
    		$Display = Read-Host -Prompt "Ingrese nombre para mostrar"
    		$Mail = Read-Host -Prompt "Ingrese direccion de correo principal"
    		$Data = New-Object PSObject -Property @{ 
    			FirstName = $First
    			LastName = $Last
    			DisplayName = $Display
    			UPN = $Mail
    		}
    		Return $Data
    	}
    } 
    $UserData = Get-Data
    Switch ($LicenseAssignmentType)
    {
    	1 
    		{
    			Write-Output "Licencia tipo 1"
    			$LicenseAssignment = "XXXXXXXX:EXCHANGEDESKLESS"
    		}
    	2
    		{
    			Write-Output "Licencia tipo 2"
    			$LicenseAssignment = "XXXXXX:YYYYYYYYYYYYYYY"
    		}
    	3
    		{
    			Write-Output "Licencia tipo 3"
    			Write-Error "File is write protected"
    		}
    	
    }
    
    Write-Output "Creando Usuario..."
    Write-Output ("	DisplayName: " + $UserData.DisplayName)
    Write-Output ("	FirstName: " + $UserData.FirstName)
    Write-Output ("	LastName " + $UserData.LastName)
    Write-Output ("	UserPrincipalName: " + $UserData.UPN)
    Write-Output ("	LicenseAssignment: " + $LicenseAssignment)
    New-MsolUser -DisplayName $UserData.Displayname -FirstName $UserData.FirstName -LastName $UserData.LastName -UserPrincipalName $UserData.UPN -UsageLocation CL -LicenseAssignment $LicenseAssignment
    
    

    Obviamente se pueden hacer muchas variantes, como por ejemplo integrar el switch para el tipo de licencia en la propia función de obtención de datos, pero lo he puesto así por si te resultaba mas legible.

    Espero que te sirva.

    Un saludo.

    Diego
    • Marcado como respuesta Pablo Galarce martes, 24 de enero de 2017 18:22
    martes, 24 de enero de 2017 16:54
  • Muchas gracias!! Me sirvió bastante
    martes, 24 de enero de 2017 18:22