Question Function Alias

Plus d'informations
il y a 1 mois 3 semaines - il y a 1 mois 3 semaines #34068 par steph
Function Alias a été créé par steph
Bonjour,Voila.
je voudrais creer un alias de cette commande mais la je bloque. Je veut pouvoir changer le nom du fichier a la demande.
la base:



[code]Get-Item .\useruid.ini | Select-Object -Property PSChildName,Mode,Name,Length,Directory,Attributes

PSChildName : useruid.ini
Mode        : -a---
Name        : useruid.ini
Length      : 53
Directory   : C:\Users\SERGIO
Attributes  : Archive
[/code]


l'alias qui ne fonctione pas me retourne une sortie Get-Item

function file {
    param(
        [String]$FileName
    )
} # end function file
Set-Alias -name file -value Get-Item $FileName| Select-Object -Property PSChildName,Mode,Name,Length,Directory,Attributes | Format-List



Je ne sais pas si c'est comme cela mais je voudrai que l'Alias file execute la commande Get-Item $FileName | Select-....
le resultat devrais ressemble a ceci

sauf que je veut entrer le nom du fichier a la demande.
Un peut comme la commande file sous Linux
Une Piste ??.
Merci
Dernière édition: il y a 1 mois 3 semaines par steph.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 3 semaines #34069 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Function Alias
Salut,
un alias pointe sur une fonction/cmdlet existant; on change juste son nom.

Pour le comportement que tu recherches tu peux utiliser une closure, un exemple de Bruce Payette :
#ClosureExample.ps1 Bruce Payette
#
# Object === data + code
#
# Closure === code + data
#
#
# Function factory - returns closures that scale their argument
# by the the value of $x
#
function scale ($x)
{
$sb = {param($y) $x * $y}
$sb.GetNewClosure()
}
#
# Define a scale-by-5 scriptblock...
#
$by5 = scale 5
1..10 | foreach { & $by5 }
#
# Define an actual function
#
$function:by5 = scale 5
#
# And use it ...
by 3
#
# Fancier function - uses "advanced function" metadata...
#
function New-ScaleFunction{
  param (
    [parameter(Mandatory=$true)]
    [string]
    $functionName,
    [parameter(Mandatory=$true)]
    [int]
    $scaleFactor
  )

  # "Advanced" scriptblock
  $sb = {
    param (
    # Can read value from pipeline as well as command line...
    [parameter(ValueFromPipeline=$true,Mandatory=$true)]
    [int]
    $valueToScale
    )
    process { $valueToScale * $scaleFactor }
  }
  # Define a scale function at the global scope...
  Set-Item "function:global:$functionName" $sb.GetNewClosure()
}

New-ScaleFunction by4 4
by4 10
1..10 | by4

Dans ton cas :
 #En interne la closure mémorise la variable locale $Name au sein d'un module ("caché")
function File($name)
{
$sb = {param() Get-Item $Name }
$sb.GetNewClosure()
}

#test
'Test' >'c:\temp\test.txt'

#création de la fonction qui mémorise le nom désiré
$MonFichier= File 'c:\temp\test.txt'

#On appel du code qui renvoi un objet fichier
&$MonFichier

Pour un accès via une variable voir ceci :
devblogs.microsoft.com/powershell/tied-variables-in-powershell/
www.leeholmes.com/more-tied-variables-in-powershell/

Deux contraintes : c'est en C# et ne fonctionne qu'avec une variable globale.

Il y a surement d'autre manière de faire ...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.069 secondes
Propulsé par Kunena