Powershell : Powershell V2 – utilisation de -asjob

 
Parmi les nouveautés de la V2, (rappel actuellement en CTP3 donc déconseillée en production), on trouve la possibilité d’exécuter des commandes en tant que job.
Cette fonctionnalité est très utile pour les tâches présentant un temps d’exécution assez, (comme la collecte d’informations via WMI sur de multiples systèmes distants).
En effet, elle permet de récupérer le prompt des le lancement du traitement, de surveiller l’exécution du job, de le stopper et de récupérer le résultat
 
Get-command *-job nous donne la liste des cmdlet disponibles :
Get-Job
Receive-Job
Remove-Job
Start-Job
Stop-Job
Wait-Job
 
Exemple d’utilisation, (avec au passage l’utilisation du nouvel éditeur graphique de la v2 : Integrated Scripting Environment , ISE)
 
Dans la fenêtre du haut : le script
Dans la fenêtre du milieu : le détail du job lancé
 
 
 
Le résultat de la commande get-job permet de voir l’état des jobs en cours :
 
 
 
La commande receive-job permet de récupérer le résultat :
 
 
 
 
 
 
 
 

Powershell : les scripts utilisés lors des techdays « Administration automatisée avec Windows Powershell » (presentation de la v2)

 
Comme promis, la suite des scripts utilisés lors des techdays 2009.
 
Ils ne sont utilisables qu’avec la v2 de Powershell.
 
Ce premier script démontre l’utilisation du remoting basé sur WinRM, et la collecte d’information sur plusieurs systèmes en simultanée
L’ouverture de session se fait via la commande new-pssession
La commande est lancée via invoke-command
Le résultat est affiché dans une interface graphique via out-gridview
 
 #initialisation des variables
 $server1 = "localhost"
 $server2 = "srv2008"
 #demande d’authentification
 $cred = get-credential maquette2008\administrator
 #creation de la session avec server2
 new-pssession -computername $server2 -cred $cred
 #lancement de la commande sur les deux serveurs et affichage dans une grille
 invoke-command -computername $server1,$server2 {get-service s* |where {$_.status -eq "Running"}} |out-gridview
 
 
Ce second script reprend les bases du précédent mais la requête est exécutée sous la forme d’un job.
Cette nouvelle fonctionnalité permet de reprendre la main sur le prompt alors que le job s’exécute en tâche de fond.
La commande get-job permet de visualiser l’état des jobs en cours
La commande receive-job permet de récupérer le résultat une fois le job terminé
 
  #initialisation des variables
 $server1 = "localhost"
 $server2 = "srv2008"
 #demande d’authentification
 $cred = get-credential maquette2008\administrator
 #creation de la session avec server2
 new-pssession -computername $server2 -cred $cred
 #lancement de la commande sur les deux serveurs en tant que job
 # icm = alias pour Invoke-command
 icm -computername $server2 -cred $cred {gwmi -list *user -recurse -namespace root\cimv2 } -asjob
 
 
 
 

PowerShell : Powershell v2 – Out-gridView

La cmdlet out-gridview est une nouveauté de la version 2 de Powershell, disponible pour le moment en CTP3, (et par conséquent déconseillé en production Clin d'oeil)
 
Assez bluffant, elle permet, sans aucune ligne de code supplémentaire, d’afficher le résultat d’une commande au sein d’une interface graphique manipulable :
Possibilité d’ordonner les colonnes par un simple clic
Possibilité de préciser des critères de recherche
Possibilité de regourper les résultats par critères
 
Les copies d’écran ci-dessous montre le résultat pour la commande
 
get-service | out-gridview
 
 
 
 
 
 
 
 
 
 
 
 
 

SCOM 2007 : How find perfs value in OperationsManager Database

 
Ci-dessous un exemple de requête qui permet d’intéroger la base de données OperationsManager pour retrouver les données de performances pour les objets de type LogicalDisk
 
Bellow an example on how to find performances data for LogicalDisk Object into the OperationsManager Database
 
 
 
select
dbo.BaseManagedEntity.FullName,
dbo.PerformanceSource.PerfmonInstanceName,
dbo.PerformanceCounter.ObjectName,
dbo.PerformanceCounter.CounterName,
dbo.PerformanceCounter.ScaleFactor,
dbo.PerformanceCounter.ScaleLegend,
dbo.PerformanceDataAllView.SampleValue,
dbo.PerformanceDataAllView.TimeSampled,
dbo.PerformanceDataAllView.TimeAdded
 
FROM    
   dbo.PerformanceSource INNER JOIN
   dbo.PerformanceDataAllView ON dbo.PerformanceDataAllView.PerformanceSourceInternalId = dbo.PerformanceSource.PerformanceSourceInternalId INNER JOIN
   dbo.BaseManagedEntity ON dbo.BaseManagedEntity.BaseManagedEntityId =dbo.PerformanceSource.BaseManagedEntityId INNER JOIN
   dbo.PerformanceCounter ON dbo.PerformanceCounter.PerformanceCounterId = dbo.PerformanceSource.PerformanceCounterId
 
Where dbo.PerformanceCounter.ObjectName = ‘LogicalDisk’
Order by Fullname,CounterName,PerfmonInstanceName, TimeSampled
 
 

PowerShell : scripts utilisés lors la présentation aux techdays 2009 – « Administration automatisée avec Windows Powershell »

 
De retour des techdays 2009
 
 
 

Vous trouverez les scripts que j’ai utilisé lors de la session OPT202 : "Administration automatisée avec Powershell et découverte de la version 2.0"

 

Le webcast et le powerpoint devraient être disponibles sous quelques semaines.

 

Afficher la liste des 10 plus gros fichier d’un dossier :

get-childitem | sort-item length | select-object -last 10

 

Afficher la liste des 5 process qui consoment les plus de CPU :

get-process | sort-object CPU | select-object -last 5

 

Supprimer les fichiers dont la taille est supérieure à 1000000 octets

get-childitem | where-object { $_.length -gt 1000000 } | foreach-object {remove-item $_.fullname}

 

Créer un fichier html présentant la liste des services avec une coloration verte ou rouge en fonction de leur état

get-service | ConvertTo-Html -Property Name,Status | foreach {
if ($_ -like "*<td>Running</td>*") {$_ -replace "<tr>", "<tr bgcolor=green>"}
else {$_ -replace "<tr>", "<tr bgcolor=red>"}} > .\get-service.html

 

Afficher sous la forme d’une table, les informations d’espace disponible et total d’un disque dur, en nomant la colonne et en présentant un résultat calculé

get-wmiobject -class win32_logicaldisk |where-object {$_.drivetype -eq 3}|format-table name, @{label="freespace Mb";Expression={$_.freespace / 1024/1024}}, @{label="TotalSize Mb";Expression={$_.size / 1024/1024}}-autosize

 

Regrouper des fichiers dans des dossiers en fonction de leur extension

new-psdrive -name fk -psprovider filesystem –root c:\demos\files
cd fk:\
get-childitem | select-object extension | sort-object extension -unique | foreach-object {new-item (".\New" + $_.extension) -type directory}
get-childitem | where-object {$_.mode -notmatch "d"} | foreach-object {$b= ".\New" + $_.extension; move-item $_.fullname $b}

 

Les scripts de la V2 dans un prochain post ….