Astuces Microsoft Powershell 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 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 Si ce fichier n’existe pas, le créer avec la commande : New-Item -ItemType File -Path $PROFILE -Force 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 : about_Profiles about_Prompts about_Scopes 🞄 🞄 🞄 Windows Linux