Windows PowerShell: ceux qui oublient histoire

D’une façon ou d’une autre, Windows PowerShell peut reconnaître vos commandes utilisées très récemment, ce qui peut être une aide non négligeable.

Don Jones

« Ceux qui oublient l'histoire, » le vieux dicton va, « sont condamnés à le répéter ». Dans le cas de Windows PowerShell, toutefois, vous voudrez vous répétez l'histoire, ainsi vous devrez précisément en souvenir. Windows PowerShell mémorise automatiquement les commandes que vous avez récemment exécuter et retient un tampon — ou histoire — vous pouvez plus facilement rappeler et exécutez de nouveau.

Choix historiques

Lorsque vous utilisez la console de Windows PowerShell, vous pouvez réellement travailler avec deux sortes de l'histoire de la commande. Les deux sont complètement indépendants et n'ont rien à voir avec l'autre.

La première est la mémoire tampon de ligne de commande, avec lequel vous êtes probablement familier. C'est ce qui apparaîtra lorsque vous appuyez sur la touche de Up flèche de rappeler une commande auparavant exécuter. Vous pouvez également appuyer sur F7 pour obtenir un menu de commandes déjà exécution. Une fois que vous consultez le menu, utilisez les touches de direction pour sélectionner une commande et appuyez sur entrée, et il sera exécuté.

Le tampon de ligne de commande conserve les 50 dernières commandes par défaut. Vous pouvez augmenter ou diminuer ce paramètre en modifiant les propriétés de la fenêtre de console elle-même. Cliquez sur la case de contrôle de la fenêtre, puis sélectionnez Propriétés. Changer la taille de la taille de la mémoire tampon de l'histoire « commande » dans l'onglet Options.

L'histoire de cette commande est réellement distincte de Windows PowerShell elle-même. Elle est maintenue par l'application d'hébergement de console. Windows PowerShell n'est pas encore conscient de que cela existe.

Une histoire que vous pouvez utiliser

L'histoire de Windows PowerShell se maintient est plus utile. Exécutez l'histoire de la commande Get –noun pour voir les quatre cmdlets intégrés qui traitent de ce journal de la longue histoire :

  • Ajouter-historique
  • Clear-histoire
  • Get-histoire
  • Invoquer-historique

Il y a également une variable intégrée: $MaximumHistoryCount. Cette valeur définit la taille du tampon de l'histoire de la commande interne de Windows PowerShell. Par défaut, elle est définie à 64. Si vous souhaitez modifier, simplement définir la variable d'une nouvelle valeur. Les modifications que vous apportez seront actives pour la session actuelle de la coquille. Si vous souhaitez effectuer le changement permanent, ajouter quelque chose comme suit à votre script de profil :

$MaximumHistoryCount = 100

Qui pourrait aller dans un fichier nommé [mon] Documents\WindowsPowerShell\profile.ps1, qui est l'un des quatre scripts profil automatiquement exécutée pour lequel le shell recherche.

Get-histoire est la cmdlet principale, que nous allons examiner, comme c'est probablement le plus utile des quatre. Il produit des objets de type HistoryInfo. Ces objets contiennent quatre propriétés que vous trouverez intéressants :

  • Ligne de commande : la commande réelle qui a été exécutée
  • StartExecutionTime : le temps a commencé à la commande
  • EndExecutionTime : le temps la commande s'est terminée
  • ExecutionStatus : le statut de la commande après achèvement ; Ce sera quelque chose comme « Terminé » ou « Stopped »

Combinant ces objets et autres commandes Windows PowerShell, c'est là où commence vraiment le truc cool. Par exemple, supposons que vous ouvrez une fenêtre de shell flambant neuf et laborieusement exécutez plusieurs commandes spécifiques pour accomplir une tâche complexe. Vous voulez transformer ces commandes dans un script, donc vous pouvez leur exécution dans l'ordre exact maintes ? Juste pour ce faire :

Get-histoire | Sélectionnez la ligne de commande –Expand | Out-script.ps1

L'astuce ici est le paramètre –ExpandProperty de Select-Object. Il provoque Select-Object à sortie uniquement le contenu de la propriété spécifiée. Dans ce cas, il est la propriété de ligne de commande des objets HistoryInfo. Ceux-ci contiennent le texte de commandes que vous avez exécuté seulement. Ensuite, vous pouvez modifier le fichier Script.ps1 dans le Windows PowerShell ISE ou un autre éditeur de script pour tordre les commandes, de transformer les valeurs codées en dur de paramètres, de supprimer toutes les commandes que vous ne voulez pas et ainsi de suite.

Supposons que vous a fait cette astuce et liquidée avec le fichier Script.ps1 suivant :

Import-Module ActiveDirectory
Import-CSV users.csv
Import-CSV users.csv | New-ADUser –path "ou=sales,dc=company,dc=com"

C'est peut-être un exemple assez court, mais en mode interactif exécutant ces commandes, vous pouvez vérifier qu'ils travaillerons — une étape à la fois. En fait, vous pouvez voir où la deuxième commande était juste une test importation du fichier CSV. Cela assure simplement qu'il a les données attendues. Ensuite, vous pouvez nettoyer le script et ajouter des paramètres :

Param(
  [string]$filename = &(Read-Host "Specify input CSV filename"),
  [string]$path = "cn=Users,dc=company,dc=com"
)
Import-Module ActiveDirectory
Import-CSV $filename | New-ADUser –path $path

La commande « test import » et les paramètres ajoutés recueillent le nom du fichier CSV et la destination OU. Il s'agit d'une meilleure approche que laisser ces codés en dur de valeurs. S'assurer que quiconque exécute ce script sera invité pour un nom de fichier si ils oublient de spécifier un (c'est genre de manière laide de faire que ce qui a incité — une fonction avancée fournirait un moyen plus propre et plus cohérent de le faire). Pour le deuxième paramètre, spécifiez une valeur par défaut qui ne suffira que quelqu'un ne spécifie pas une autre valeur.

Il s'agit d'un moyen facile de prendre un processus que vous avez accompli manuellement une fois et de transformer rapidement en une séquence répétitive d'actions que même quelqu'un d'autre pourrait utiliser.

Plus l'histoire Tricks

La capacité de « get » l'histoire de ligne de commande offre de nombreux autres astuces soignées :

  • Exécutez Get-histoire | Export-CliXMLfilename de commandes à l'exportation vers un fichier XML. Envoyer le fichier XML à un collègue, et ils peuvent rapidement répéter ces commandes en exécutant Import-CliXMLfilename | Invoquer-histoire.
  • Utilisez les propriétés StartExecutionTime et EndExecutionTime pour mesurer le temps que requis pour compléter une commande. Par exemple : get-histoire | Sélectionnez commandline,executionstatus,startexecutiontime,endexecutiontime,@{n='ExecutionDuration';e={$_.EndExecutionTime-$_.StartExecutionTime}}
  • Localiser rapidement passé commandes sans avoir à faire défiler avec la touche flèche bas Up. Par exemple, si vous savez que vous avez exécuté une commande qui utilise "Sélectionner", essayez ceci pour le trouver : get-histoire | où {$_.Ligne de commande-comme ' * select *' }

Comme toujours, Windows PowerShell traite tout comme un objet plutôt que comme une masse de texte. Ce qui rend ce genre de recherche et de filtrage beaucoup plus pratique que si vous étaient scannant un fichier texte ou quelque chose d'aussi encombrante.

Don Jones

Don Jones est un Microsoft MVP lauréat du prix de l'auteur de "Apprendre Windows PowerShell dans un mois de déjeuners" (Manning Publications Co., 2010), un livre conçu pour aider tout administrateur à devenir efficace avec Windows PowerShell. Jones offre également une formation de Windows PowerShell publique et sur place. Communiquer avec lui par le biais de son site Web à ConcentratedTech.com.

Contenu associé