82 votes

Équivalent à C# " s "à l'aide de" mot-clé dans powershell?

Lorsque j'utilise un autre objet dans la .net-Framework en C# je peux économiser beaucoup de saisie en utilisant l'aide de la directive.

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

...


  var blurb = new Thingamabob();

...

Donc, il y a un moyen de Powershell pour faire quelque chose de similaire? Je suis d'accéder à un grand nombre de .net les objets et ne suis pas heureux d'avoir à taper

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

tout le temps.

57voto

dahlbyk Points 24897

Il n'y a vraiment rien au niveau espace de noms comme ça. J'ai souvent attribuer des types communément utilisés pour les variables, puis de les instancier:

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

Probablement pas la peine si le type ne sera pas utilisé à plusieurs reprises, mais je crois que c'est le meilleur que vous pouvez faire.

12voto

Richard Berg Points 14218

Consultez cet article de blog à partir d'un il ya quelques années: http://blogs.msdn.com/richardb/archive/2007/02/21/add-types-ps1-poor-man-s-using-for-powershell.aspx

Fondamentalement, ce que je fais, c'est analyser l'assemblée pour non trivial types, puis d'écrire un "constructeur" qui utilise l'Add-Membre de les ajouter (de façon structurée) pour les objets que j'aime.

Voir aussi ce suivi post: http://richardberg.net/blog/?p=38

5voto

Josh Points 38617

Voici un code qui fonctionne dans PowerShell 2.0 pour ajouter des types d'alias. Mais le problème est qu'il n'est pas étendue. Avec du travail supplémentaire que vous pourriez "de l'onu-l'importation" les espaces de noms, mais cela devrait vous descendez à un bon début.

##############################################################################
#.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)
            }
        }

    }

}

5voto

bouvierr Points 1046

Si vous avez besoin de créer une instance de votre type, vous pouvez stocker le nom de la longue espace de noms dans une chaîne de caractères:

$st = "System.Text"
$sb = New-Object "$st.StringBuilder"

Il n'est pas aussi puissant que l' using directive en C#, mais au moins, il est très facile à utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X