74 votos

Equivalente a C#'s "uso" de la palabra clave en powershell?

Cuando yo uso otro objeto en el .net-Framework en C# puedo ahorrar un montón de escribir mediante el uso de la directiva.

using FooCompany.Bar.Qux.Assembly.With.Ridiculous.Long.Namespace.I.Really.Mean.It;

...


  var blurb = new Thingamabob();

...

Entonces, ¿hay una manera en Powershell para hacer algo similar? Yo estoy acceso a una gran cantidad de .neto de los objetos y no soy feliz de no tener que escribir

 $blurb = new-object FooCompany.Bar.Qux.Assembly.With.Ridiculous.Long.Namespace.I.Really.Mean.It.Thingamabob;

todo el tiempo.

56voto

dahlbyk Puntos 24897

Realmente no hay nada en el nivel de espacio de nombres así. A menudo me asignar los tipos utilizados para las variables y, a continuación, crear instancias de las mismas:

$thingtype = [FooCompany.Bar.Qux.Assembly.With.Ridiculous.Long.Namespace.I.Really.Mean.It.Thingamabob];
$blurb = New-Object $thingtype.FullName

Probablemente no vale la pena, si el tipo no ser utilizado en varias ocasiones, pero creo que es la mejor que se puede hacer.

12voto

Richard Berg Puntos 14218

Echa un vistazo a este post en el blog desde hace un par de años: http://blogs.msdn.com/richardb/archive/2007/02/21/add-types-ps1-poor-man-s-using-for-powershell.aspx

Básicamente lo que quiero hacer es rastrear la asamblea para que no trivial tipos, a continuación, escribir un "constructor" que utiliza a los Miembros de Agregar agregar (en una manera estructurada) a los objetos que me importa.

Ver también este seguimiento post: http://richardberg.net/blog/?p=38

5voto

Josh Puntos 38617

Aquí un poco de código que funciona en PowerShell 2.0 para añadir alias de tipo. Pero el problema es que no es de ámbito. Con algo de trabajo extra que podría "no importar" los espacios de nombres, pero este debe tener un buen comienzo.

##############################################################################
#.SYNOPSIS
# Add a type accelerator to the current session.
#
#.DESCRIPTION
# The Add-TypeAccelerator function allows you to add a simple type accelerator
# (like [regex]) for a longer type (like [System.Text.RegularExpressions.Regex]).
#
#.PARAMETER Name
# The short form accelerator should be just the name you want to use (without
# square brackets).
#
#.PARAMETER Type
# The type you want the accelerator to accelerate.
#
#.PARAMETER Force
# Overwrites any existing type alias.
#
#.EXAMPLE
# Add-TypeAccelerator List "System.Collections.Generic.List``1"
# $MyList = New-Object List[String]
##############################################################################
function Add-TypeAccelerator {

    [CmdletBinding()]
    param(

        [Parameter(Position=1,Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
        [String[]]$Name,

        [Parameter(Position=2,Mandatory=$true,ValueFromPipeline=$true)]
        [Type]$Type,

        [Parameter()]
        [Switch]$Force

    )

    process {

        $TypeAccelerators = [Type]::GetType('System.Management.Automation.TypeAccelerators')

        foreach ($a in $Name) {
            if ( $TypeAccelerators::Get.ContainsKey($a) ) {
                if ( $Force ) {
                    $TypeAccelerators::Remove($a) | Out-Null
                    $TypeAccelerators::Add($a,$Type)
                }
                elseif ( $Type -ne $TypeAccelerators::Get[$a] ) {
                    Write-Error "$a is already mapped to $($TypeAccelerators::Get[$a])"
                }
            }
            else {
                $TypeAccelerators::Add($a, $Type)
            }
        }

    }

}

0voto

Colin Cassidy Puntos 362

Este windows powershell publicación del blog tiene un ejemplo de cómo lograr esto

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X