samedi 14 mai 2011

utilisation de %variable% en PS

Salut,

voici une petite fonction pouvant afficher/créer des variables d'environements aussi simple que les batchs NT


del alias:set -ea 0
function set
{
  $_nam,$_rest = "$args".Split('=')
  if(!$_rest -and $_nam) { gci "env:$($_nam)" }
  elseif(!$_nam) { gci env: }
  else {
    $_val = [environment]::ExpandEnvironmentVariables("$_rest")
    ni -pa env:$_nam -va $_val -fo
  }
}


et voici quelques exemples d'utilisation:


# affichage de toutes les variables d'environments
[1] set
Name                           Value                                           
----                           -----                                           
ALLUSERSPROFILE                D:\Documents and Settings\All Users             
APPDATA                        D:\Documents and Settings\walid2mi\Applicatio...
CLIENTNAME                     Console                                         
CommonProgramFiles             D:\Program Files\Fichiers communs   
...
...

[2] # affichage des variables commencant par "P"
[2] set p*
Name                           Value                                           
----                           -----                                           
Path                           D:\WINDOWS\system32;D:\WINDOWS;D:\WINDOWS\Sys...
PATHEXT                        .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;....
PROCESSOR_ARCHITECTURE         x86                                             
ProgramFiles                   D:\Program Files                                

[3] # création d'une variable "user"
[3] set user = %username%

[4] # création d'une variable "Home"
[4] set home=$home



mercredi 4 mai 2011

Ajouter un add-On à son éditeur ISE

Salut,

me revoilà, ce petit code permet d'ajouter à la barre de menu un nouveau menu personnalisé destiné à l'ajout des add-ons, vous pouvez inclure cette fonction dans votre profil ISE pour qu'elle se charge à chaque session démarrée.


Function Add-AddOns
{
<# 
.synopsis
 affiche et/ou créer des add-ons
.parameter List
  affiche tous les noms des add-ons disponibles
.parameter Name
  nom du add-on
.parameter ShortCut
  un raccourcis pour le add-on
.parameter Action
  un bloc de script qui va s'executer à l'appel du add-on
.example
  Add-AddOns -List
.example
 PS> Add-AddOns -n "Effacer le volet de Script" -s "ctrl+shift+b" -a {   
 >>   $psISE.CurrentFile.Editor.Clear()
 >>  }

  Créer un add-on pour effacer le volet script
.example
  PS> Add-AddOns -RemoveAll
  
  Supprime tous les add-Ons 
.example
  PS> Add-AddOns -RemoveItem 1
  
  Supprime l'add-on ayant l'index 1
.example
  PS> $sb = { Invoke-Expression 'c:\script.ps1'  }
  PS> Add-AddOns "script.ps1" "Ctrl+shift+q" $sb
  
  Execute le script 'c:\script.ps1'
#> 
  [CmdletBinding(DefaultParameterSetName='List')]
  Param(
   [Parameter(Mandatory=$False,Position=0,ParameterSetName='List')]
   [Switch]$List,
   [Parameter(Mandatory=$True,Position=0,ParameterSetName='RemoveAll')]
   [Switch]$RemoveAll,
   [Parameter(Mandatory=$True,Position=0,ParameterSetName='RemoveItem')]
   [int]$RemoveItem,
   [Parameter(Mandatory=$True,Position=0,ParameterSetName='Name')]
   [String]$Name,
   [Parameter(Mandatory=$false,Position=1,ParameterSetName='Name')]
   $ShortCut=$null,
   [Parameter(Mandatory=$True,Position=2,ParameterSetName='Name')]
   [ScriptBlock]$Action
  )
  if($Host.Name -ne 'Windows PowerShell ISE Host') 
  { throw "fonctionne uniquement dans l'environment ISE" }
  Switch ($PSCmdlet.ParameterSetName)
  {
     "List"
     {
        $Items = $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus
        for($i=0;$i -le $items.count-1;$i++) 
         { Select -inp $Items @{n="Index";e={$i}},
            @{n="Name";e={$_.Item($i).DisplayName}}   
         }
     }
     "RemoveAll"
     { 
       $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Clear() 
     }
     "RemoveItem"
     { 
       $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.RemoveAt($RemoveItem)
     }
     "Name"
     {
       $psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add($Name,$Action,$ShortCut)
     }
  }
}



Bon Scripting  ;)