Astuces diverses

Obtenir la version de PowerShell

> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
_____  _____  _____  ________
5      1      17763  592

Obtenir tous les alias possibles pour une cmdlet

On peut lister l’ensemble des alias d’une cmdlet avec la commande :

Get-Alias -Definition <nom-cmdlet>
Exemple
> Get-Alias -Definition Get-Content

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           cat -> Get-Content
Alias           gc -> Get-Content
Alias           type -> Get-Content

Le nom de la cmdlet dont on veut lister tous les alias doit être fournie dans sa version non-abrégée sous peine d’obtenir une erreur

Exemple pour la cmdlet Get_Content dont un des alias est gc
> get-alias -Definition gc
Get-Alias: This command cannot find a matching alias because an alias with the definition 'gc' does not exist.

Obtenir l’ensemble des membres d’une cmdlet

Lorsqu’on exécute une cmdlet, le résultat de celle-ci — lorsqu’il n’est pas redirigé dans le pipeline — consiste en un certain nombre de propriétés dont les valeurs sont affichées à l’écran soit sous forme de table soit sous forme de liste.

Or, ces propriétés ne sont parfois qu’un sous-ensemble de celles disponibles.

Pour obtenir, l’ensemble des propriétés — mais aussi des méthodes — disponibles dans l’objet retourné par une cmdlet, on peut le rediriger vers la cmdlet Get-Member.

> Get-Disk (1)

Number Friendly Name Serial Number                    HealthStatus         OperationalStatus      Total Size Partition
                                                                                                             Style
------ ------------- -------------                    ------------         -----------------      ---------- ----------
0      Samsung SSD … 0025_3856_1190_05FE.             Healthy              Online                  465.76 GB GPT

> Get-Disk | Get-Member (2)


   TypeName: Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Disk

Name                      MemberType     Definition
----                      ----------     ----------
DiskNumber                AliasProperty  DiskNumber = Number
Dispose                   Method         void Dispose(), void IDisposable.Dispose()
[...]
AdapterSerialNumber       Property       string AdapterSerialNumber {get;}
AllocatedSize             Property       ulong AllocatedSize {get;}
BootFromDisk              Property       bool BootFromDisk {get;}
FirmwareVersion           Property       string FirmwareVersion {get;}
FriendlyName              Property       string FriendlyName {get;}
Guid                      Property       string Guid {get;}
IsBoot                    Property       bool IsBoot {get;}
IsClustered               Property       bool IsClustered {get;}
IsHighlyAvailable         Property       bool IsHighlyAvailable {get;}
IsOffline                 Property       bool IsOffline {get;}
IsReadOnly                Property       bool IsReadOnly {get;}
IsScaleOut                Property       bool IsScaleOut {get;}
IsSystem                  Property       bool IsSystem {get;}
LargestFreeExtent         Property       ulong LargestFreeExtent {get;}
Location                  Property       string Location {get;}
[...]
1 utilisée seule, la cmdlet Get-Disk affiche par défaut uniquement 7 propriétés
2 l’appel à Get-Member montre clairement que bien plus de propriétés sont en fait présents dans l’objet résultat de la cmdlet Get-Disk

Outre le fait d’afficher l’ensemble des propriétés et méthodes de l’objet retourné par une cmdlet, Get-Member affiche aussi son type (→ Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Disk dans l’exemple donné).

On peut alors obtenir l’ensemble des cmdlets acceptant ce type d’objet en entrée grâce à la cmdlet Get-Command avec l’option -ParameterType.

Exemple
> Get-Command -ParameterType Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Disk (1)

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Get-DiskSNV                                        2.0.0.0    Storage
Function        Get-DiskStorageNodeView                            2.0.0.0    Storage
Function        New-Volume                                         2.0.0.0    Storage

> Get-Command -ParameterType CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Disk (2)

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Get-DiskSNV                                        2.0.0.0    Storage
Function        Get-DiskStorageNodeView                            2.0.0.0    Storage
Function        New-Volume                                         2.0.0.0    Storage
1 Requête pour lister l’ensemble des cmdlets prenant en entrée le type d’objet retourné par Get-Disk (→ Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Disk)
2 On peut ausii n’indiquer que la partie du nom qui suit le dernier '.' (→ CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Disk)

Personnaliser l’invite de commande

  1. Ouvrir le fichier de profil dont le chemin est indiqué dans la variable d’environnement $PROFILE (→ echo $PROFILE).

    Exemple
    > echo $PROFILE
    C:\Users\claud\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
  2. Si ce fichier n’existe pas, le créer avec la commande :

    New-Item -ItemType File -Path $PROFILE -Force

  3. Créer/Modifier la fonction function global.prompt { …​ } ou function prompt { …​ } pour y saisir les commandes de personnalisation de l’invite de commandes.

Exemple n°1

Obtenir une invite de commande semblable à :

[C:\Windows\system32] (1)
PS:20 > (2)
1 répertoire courant
2 prompt avec indicateur de n° de commande depuis le début de session
Code source
function global:prompt
{
    $id = 1
    $historyItem = Get-History -Count 1
    if($historyItem)
    {
        $id = $historyItem.Id + 1
    }

    Write-Host -ForegroundColor DarkGray "`n[$(Get-Location)]"
    Write-Host -NoNewLine "PS:$id > "
    $host.UI.RawUI.WindowTitle = "$(Get-Location)"

    "`b"
}
Exemple n°2

Obtenir une invite de commande semblable à :

[C:\...\claud\Documents\bts-sn2-ir] (1)
(11ms) > (2)
1 Répertoire courant limité à 2 répertoires parents
2 Temps d’exécution de la dernière commande
Code source
function Prompt {
    # Renomme la fenêtre avec le chemin courant
    $host.UI.RawUI.WindowTitle = "$(Get-Location)"

    # Affiche le lecteur et les 3 derniers répertoire du chemin courant
    Write-Host -NoNewLine -ForegroundColor DarkGray "`n["
    if (($pwd.Path.Split('\').count -gt 4)){
        write-host -NoNewline -ForegroundColor DarkGray "$($pwd.path.split('\')[0], '...', $pwd.path.split('\')[-3], $pwd.path.split('\')[-2], $pwd.path.split('\')[-1] -join ('\'))"
    }
    else{
        Write-Host -NoNewline -ForegroundColor DarkGray "$($pwd.path)"
    }
    Write-Host -ForegroundColor DarkGray "]"

    # Affiche le prompt et le temps d'exécution de la dernière commande
    try {
        $history = Get-History -ErrorAction Ignore -Count 1
        if ($history) {
            Write-Host -ForegroundColor DarkGray "(" -NoNewline
            $ts = New-TimeSpan $history.StartExecutionTime $history.EndExecutionTime
            switch ($ts) {
                {$_.TotalSeconds -lt 1} {
                    [int]$d = $_.TotalMilliseconds
                    '{0}ms' -f ($d) | Write-Host -ForegroundColor DarkGray -NoNewline
                    break
                }
                {$_.totalminutes -lt 1} {
                    [int]$d = $_.TotalSeconds
                    '{0}s' -f ($d) | Write-Host -ForegroundColor DarkGray -NoNewline
                    break
                }
                {$_.totalminutes -ge 1} {
                    "{0:HH:mm:ss}" -f ([datetime]$ts.Ticks) | Write-Host -ForegroundColor DarkGray -NoNewline
                    break
                }
            }
            Write-Host ") " -ForegroundColor DarkGray -NoNewline
        }
    }
    catch { }
    "> "
}

🕮 Sources :


🞄  🞄  🞄