Le pipe en PowerShell, archi et environnement

Source: Livre "Exchange Serveur 2013 - examen 70-341", Editions ENI (fev 2014) - ch 4, p120-128

Architecture et environnement PowerShell - p 120 à 128

Orienté objet (Get récup une liste d'objets, avec leur prop et méthodes), les objets sont typés (avec pipe => chaque sortie de cmdlet est utilisée comme entrée du cmdlet suivant si le type de données est compatible).

Par ex: Get-DistributionGroup "ENI Trainers" | Get-DistributionGroupMember | Set-MailBox -ProhibitSendQota 1MB
              PowerShell récup un groupe                 liste des users(du groupe préc)   limite d'envoi à 1MB sur bal des users (préc, => toutes bal du groupe ENI Trainers.

 

Bib powershell à www.codeplex.com 

PowerShell peut lancer des commandes classiques (ipconfig, netsh...), dialoguer avec .bat .vbs ou autres, et utilise nativement les assemblies .NET et objets COM.

Tab, historique avec F7.

PowerShell ISE (= Integrated Scripting Environnement) pour scripts plus complexes, car offre fonctions IntelliSense (CTRL+Espace menu contextuels de complétion en cours d'écriture), snipets avec CRTL+J, un panneau qui montre toutes commandes, fonctions de debugage (F9), de pas à pas (F10, F11 et SHIFT+F11)

EMS (Exchange Management Console)

EMS est le résultat de l'exe de  C:\Windows\System32\WindowsPowerShell\1.0\powershell.exe -noexit-command ". 'C:\Program Files\Microsoft\Exchange Server\v15\bin\RemoteExchange.ps1' ; Connect-ExchangeServer -auto-ClientApplication:ManagementShell "  -  soit les 3 opérations: charger env PowerShell, charger bib RemoteExchange.ps1 + se connecter à orga exchange (Connect-ExchangeServer)

Voir les (944) commandes Exchange 2013 (inclus commandes des modules MicroSoft.PowerShell.Management et MicroSoft.PowerShell.Utility): Get-ExCommand
Voir les (770)      "                                                      :   Get-Command -Module <fqdn-du-srv>
            2 284                           dispo dans envmnt :   Get-Command

Ex de commandes PowerShell v4 - Exchange 2013
Get-MailBox liste des bal
Set-MailUser -Identify pnom -ExternalEmailAddress email@eni.fr conf email externe d'un user
Get-MailBox | Format-List liste  users avec param principaux
Get-MailBox -Database DB01 | New-MoveRequest -TargetDatabase DB02 déplace tous users de db DB01 vers DB02
Get-DistributionGroup | Where Name -like "*ENI*" | SetDistributionGroup -Managedby "ENI\email" assigne un responsable à un ensemble de listes de distrib
Get-Message | Where From -like "*brahim*" | Remove-Message supr tous les messages envoyés par Brahim dans les files d'attente

Commandes de base PowerShell

Update-Help maj aide. Ex: Get-Help Get-Command -Examples ou Get-Help Get-Command -Parameter commandType
Get-Service renvoie la liste des services avec leur état. En ajoutant un Get-Member (ie Get-Service | Get-Member) on liste les méthodes (membres des objets retournés par Get-Service).

Avec la cmdlet Format-List on va pouvoir sel les propriétés et leurs état pour le service Schedule: Get-Service Schedule | Format-List -Property *
Autres format de sortie: Get-Service | Format-List  et/ou   Get-Service | Format-Custom  et/ou   Get-Service | Format-Table et/ou   Get-Service | Format-Wide  et/ou   Get-Service | format-table name, Servicetype, Canshutdown

Si la 1ere commande retourne du texte, pour rechercher une chaine de caractère précise:   ipconfig | findstr "Adresse"   (ou ipconfig | findstr "IPv4"  car  ipconfig | findstr "IPV" ne retourne rien)

Enregistrement session shell: Start-Transcript   ...   Stop-Transcript 

gestion des alias

aff détail de l'alias ps (Get-Process)  Get-Alias ps
Liste les alias qui executent la cmdlet Set-Location: Get-Alias | where-object {$_.definition -eq "set-location"}
crée alias pour Get-Help (n'affiche rien en retour): Set-Alias gh Get-Help
Supprime alias (n'affiche rien, sauf si erreur): Remove-Item alias:gh

Variables et boucles

$result = ipconfig   puis affichage avec   $result 

création d'une fonction
Startfonc.ps1 contient:

for ($i=0 ; $i -lt $result.length; $i++ )
{
"{0} {1}" -f $i, $result[$i]
}

C:\Users\Secretariat.EVT\Desktop\Startfonc.ps1

-> affiche le ipconfig

Startfonc2.ps1 contient:

$i=1
foreach ($singleLine in $result) {
$i++
"{0} {1}" -f $i, $singleLine
}

-> affiche le ipconfig

se déplacer dans les ressources tierces

Récup info bios: Get-WmiObject win32_bios
Récup infos os du srv Exchange 2013 à distance: Get-WmiObject -Class Win32_OperatingSystem -ComputerName 172.16.1.21

Liste les env de navigation dispo: Get-PSDrive
cd HKLM   puis pour naviguer ds base registre:  cd SYSTEM\CurrentControlSet\Control