Table des matières

Quelques notes sur PowerShell

SOURCES D’INFORMATIONS

QU’EST CE QUE POWERSHELL

Langage de script, qui permet l’automatisation de tâches ”d’administrations SIC”. Conçu pour l’interopérabilité. Il y a des commandes pour l’environnement Microsoft, ( source 1, extrait page 24 ) ;

Des éditeurs tiers produisent leur commandes ;

De plus, PowerShell s’appuie sur la technologie .NET, qui permet ainsi de donner accès à la bibliothèque de classes du framework .NET.

AIDE

Liste des alias disponibles

SYNTAXE ;

Get-Alias

Les alias sont des reprises de commandes “CMD” et linux.

Il y a t’il une reprise de commandes d'autres systèmes.. ??

Lister les commandes

SYNTAXE ;

Get-Command -CommandType la-commande-powershell

Exemple ;

Get-Command -CommandType cmdlet

Système d'aide intégré

L'aide est à télécharger, via Internet ( proxy non supportés ).

Il faut disposer de droit d'Administrateur pour la mettre à jour.

Est il possible de trouver l'emplacement de stockage réseau en regardant la GPO du poste de travail ?
Piste, utiliser, ”Set the default Source Path for Update-Help”

SYNTAXE ;

Help nom-de-la-commande

Exemple ;

Help Import-Module

Pour obtenir de l'information concernant les concepts de powershell, saisir ;

Help about_*
Get-Help "nom-de-la-commande"

Il y a 3 niveaux d'aide.

Des exemples sont disponibles avec la commande ;

Get-Help "nom-de-la-commande" -examples

Mise à jour de l'aide

Rappel, il faut avoir des droits d'administrateur.
:!: Règle : un téléchargement par jour et par poste de travail. Permet de ne pas surcharger les serveurs.
Exemples ;
Mettre à jour de l'aide :

Update-Help

Mettre à jour l'aide, pour le module “ActiveDirectory”,

Update-Help -Module ActiveDirectory

Mettre à jour l'aide en Français,

Update-Help -UICulture fr-FR

Télécharger l’aide,

Save-Help UICulture en-US -DestinationPath D:\DepotAide -Force
Le paramètre “-Force” permet de passer outre la limitation d’un téléchargement par jour pour un poste de travail..

STRUCTURE - essai d'une description arborescente des éléments de powershell

Si précédent est valable, ci-dessous quelques exemples de “magasin de données” ou de “fournisseurs” ;

Comment identifier un “élément” quand ce n’est pas explicite ? :?:

C’est à dire, implicitement, de déterminer comment un “élément” peut être correctement utilisé. Connaître sa syntaxe précise.

Exemple, “Get-Content”, est-ce une commande ou autre ? Cet élément peut-il recevoir et/ou envoyer des informations avec le pipe ? :?:
Exemple de “fournisseurs” < https://learn.microsoft.com/fr-fr/windows/win32/srvnodes/wmi-mi-omi-providers >

LES COMMANDES

Les commandes, sont appelées “cmdlets”, soit pour “command-applets”.

Type de commandes

- alias, - function, - cmdlet, - externalscript, - application. Les cmdlet seraient les commandes natives, les autres des commandes personnalisées.. ??

Brique(s) d'une commande

- Des paramètres, – qui sont propres à la commande, – qui sont commun aux autres commande.

Syntaxe d’une commande

Une commande est constituée d'un “verbe” et d'un “nom”.

La syntaxe : "verbe-nom"

Exemples de “verbe”

Exemples de “nom”

NOTE : pour illustrer le propos voir le fichier ..\Documents\Gestion personnel\Culture personnel\ElaborationDoc\20231227_DDAD_PWSH_Lescommandes-verb-noun.odt

Rechercher les commandes (ou cmdlet)

Pour chercher les commandes à partir du “verbe”,

Pour chercher les commandes à partir du “nom”,

Pour chercher les commandes d'un certain type,

Permet également de lister les programmes ou application Windows.
Exemple :

Get-Command ipconfig | format-list *
Get-CimInstance -ClassName Win32_USB | Select-Object... | Format-List Name, *time
A réécrire avec les termes utiles..

LES OBJETS


< https://learn.microsoft.com/fr-fr/powershell/module/microsoft.powershell.core/about/about_objects?view=powershell-7.3 >
Description courte
Fournit des informations essentielles sur les objets dans PowerShell.

Description longue
Chaque action que vous effectuez dans PowerShell se produit dans le contexte des objets. Lorsque les données passent d’une commande à l’autre, elles se déplacent en tant qu’un ou plusieurs objets identifiables. Un objet est ensuite une collection de données qui représente un élément. Un objet est constitué de trois types de données : le type d’objets, ses méthodes et ses propriétés.

LISTER LES ACTIONS POSSIBLES SUR UN OBJET (soit tous les "Verb" applicables)

Utiliser la commande ;

Get-Member

”..Get-Member, permet de découvrir les objets, les propriétés et les méthodes qui sont disponibles pour les commandes. Toute commande qui produit une sortie basée sur un objet peut-être redirigée vers Get-Member..“

La commande ci-dessus, établis une liste, dans laquelle on peut voir par exemple que pour passer en majuscule on peut utiliser “ToUpper”.

Syntaxe correspondante : $MaVariable.ToUpper

Est ce à dire que cela peut varier en fonction des objets.. ??? > OUI
Est ce que { “Item” | Get-Member } fonctionne ???
Remarque ci-dessus, permettrait-elle de comprendre la différence entre “Item” et “Objet”.. ???

RENVOI DE TEXTE

Source 1, lire page 68.

Exemple d'usage : élaborer un menu de sélection.

Ou affichage possible sur tout autres “hôtes”.. ???

* Write-Output, pour le renvoi, l'affichage de texte sur la console ou dans un fichier.

GESTION DES CARACTÈRES

** Utilisation des guillemets

*** Les guillemets double < " " >

Ils permettent d'afficher le contenus d'une ou plusieurs variable(s). Cela s'appelle “la substitution des variables”. Exemple : $a = 'Bonjour' $b = 'monde ! ' “$a $b” Bonjour monde !

*** Les guillemets simple < ' ' >

Ils permettent d'afficher littéralement ce qui est compris entre ces guillemets. Exemple : '$a $b' $a $b Pour combiner l'affichage des caractères brut et du contenus de variable(s), il faudra utiliser le caractère dit “backtick”. Soit utiliser, < ` > devant le caractère à afficher tel qu'il a été saisie.. qu'on le lit à l'écran.. Pour le même effet concernant les objets, il semblerait qu'il soit nécessaire d'utiliser la syntaxe { $($objet.propriété) } - Exemple : > “Taille du fichier : $($a.Length) octets” $a étant une variable faisant référence à un fichier. Taille du fichier : 10 octets

** Stocker une chaîne de caractères de plusieurs lignes

SOURCES D’INFORMATIONS < https://devblogs.microsoft.com/scripting/powertip-use-here-strings-with-powershell/ > $Chaine1 = @” Lundi : début de semaine “difficile” Mercredi : jour des enfants Vendredi : vive le début du week-end ! “@ Source 1, page 127 Set-Popup est une 'Function' Est ce que cela pourrait fonctionner avec une “popup” ? { Set-Popup -t 'Mon titre' -m “$Chaine1” }

LES COMMENTAIRES

Pour mettre une ou plusieurs ligne(s) en commentaire, - Taper { # } devant chaque ligne. Pour mettre en commentaire tout un bloc en une fois. - Taper { <# } au début juste avant le premier mot et { #> } juste après le dernier mot, Ou bien, - Taper [Alt] [Shift] et sélectionner avec la souris, puis saisir { # }.

GESTION DES FICHIERS ET DES DATES

** Gestion des fichiers

Lorsque l'on manipule des fichiers, il est important d'avoir en tête le type d'encodage de données d'un fichier, soit ; - Unicode, - ASCII, - UTF8, - UTF32, - etc..

*** Écrire des données dans un fichier

Deux commandes, qui permettent de créer des fichiers et des données.. Syntaxes { Set-Content } l'utilisation de Set-Content, applique la méthode ToString, pour être sûre d'écrire des caractères. { Out-File } l'utilisation de Out-File, attends un formatage ( ?? ou encodage ?? ) des données.

EXEMPLES DE LIGNES DE SCRIPTS

Obtenir le nom de l'ordinateur, depuis les variables d'environnement. - Taper { Get-Content Env:COMPUTERNAME }

ETUDE DE SCRIPT - RELEVÉ LES INFORMATIONS D'UN ORDINATEUR

** INFORMATIONS WWW

1. < https://docs.microsoft.com/fr-fr/powershell/scripting/samples/collecting-information-about-computers? view=powershell-7.2#listing-computer-manufacturer-and-model > 2. < https://itechtrace.com/trouver-le-numero-de-serie-de-votre-ordinateur/ > 3. < https://blogpeda.ac-bordeaux.fr/stageblog/2018/02/28/connaitre-son-systeme-en-mode-commandewmic/

4. < https://briot-jerome.developpez.com/hardware/tutoriels/identifier-composants-ordinateur-wmic/#LXIIIA

# FICHIER DE COLLECTE DES INFORMATIONS, le nom est constitué du login de l'utilisateur
# - Création du fichier
$NomFichierCollecte = Get-Content Env:USERNAME
$FichierCollecte = New-Item -Path "C:\Users\login\Documents\Traitement\PWSH\Releves-infosPC\"
-Name "$NomFichierCollecte.txt" -ItemType file
# RECOLTE DES INFORMATIONS
# Ordinateur
# - Nom, type
Get-CimInstance -ClassName Win32_ComputerSystem | Format-List 
Name,Manufacturer,SystemFamily,Model | Out-File $FichierCollecte
# - Numéro de série
WMIC BIOS GET SERIALNUMBER | Out-File $FichierCollecte -Append
# - Système d'exploitation
Get-ComputerInfo | Format-List WindowsVersion | Out-File $FichierCollecte -Append
# MESSAGE DE REMERCIEMENT
$TexteMessage = @"
Vos informations ont bien ete transmises.
Vos correspondants vous remercient de votre collaboration.
"@
$TexteMessage

* ETUDE DE SCRIPT - TRANSFERT DE DONNEES DE COMMANDE DANS UN FICHIER CSV

** INFORMATION

< https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv? view=powershell-7.2

$NomFichierCollecte = Get-Content Env:USERNAME
$FichierCollecte = New-Item -Path "C:\Users\login\Documents\Traitement\PWSH\Releves-infosPC\"
-Name "$NomFichierCollecte.csv" -ItemType file
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object Name, Manufacturer, SystemFamily,
Model | Export-CSV $FichierCollecte -Encoding Default -UseCulture fr-FR
WMIC BIOS GET SERIALNUMBER | Export-CSV $FichierCollecte -Append -Encoding Default -
UseCulture fr-FR
Get-ComputerInfo | Select-Object WindowsVersion | Export-CSV $FichierCollecte -Append -Encoding 
Default -UseCulture fr-FR
$TexteMessage = @"
Vos informations ont bien ete transmises.
Vos correspondant vous remercient de votre collaboration.
"@
$TexteMessage

..REPRENDRE PAGE 144 ..