New-object
| Fiche express | |
|---|---|
| Domaine | Interopérabilité .NET / COM |
| Cmdlet | New-Object
|
| Voir aussi | Powershell .net · Powershell COM |
New-Object instancie un objet .NET ou COM. C'est le point d'entrée de l'interopérabilité de PowerShell avec les frameworks .NET, COM, WMI et WSH.
Instancier un objet COM
COM (Component Object Model) permet d'interagir avec les API des applications. Quelques technologies connexes : DDE (Dynamic Data Exchange), OLE (Object Linking and Embedding), ADSI, WMI.
Les applications sont représentées dans le registre par leur ProgID (identification
programmatique), sous la forme <programme>.<composant>.<version> — par
exemple Word.Application.1 — et par un CLSID.
Rechercher un ProgID :
function Get-ProgID
{
param([string]$ProgID = '.')
Get-ChildItem REGISTRY::HKEY_CLASSES_ROOT\CLSID\*\ProgID |
Where { $_.GetValue('') -match $ProgID } |
ForEach-Object { $_.GetValue('') }
}
Get-ProgID explorer
Créer un objet COM :
$wshell = New-Object -ComObject WScript.Shell
$wshell | Get-Member
Paramètres : -ComObject (ProgID de l'objet), -Strict (erreur
si l'objet COM est en réalité un objet .NET encapsulé).
Instancier un objet .NET
# Constructeur simple
New-Object -TypeName System.DateTime
# Surcharge du constructeur
$var = New-Object -TypeName DateTime -ArgumentList 2008, 2, 13
# Instance de type String
$chaine = New-Object -TypeName System.String -ArgumentList 'Bonjour'
$chaine = New-Object System.String('Bonjour')
Déterminer l'encodage d'un fichier :
$sr = New-Object System.IO.StreamReader fichier.txt
$sr.CurrentEncoding
Assemblies
Une assembly est un ensemble de types .NET formant une unité logique exécutée par le CLR (Common Language Runtime).
# Lister les assemblies chargées
$assemblies = [System.AppDomain]::CurrentDomain.GetAssemblies()
$assemblies[0].GetExportedTypes()
# Charger une assembly
[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
# Lister les types d'une assembly
[System.AppDomain]::CurrentDomain.GetAssemblies() |
Where { $_.FullName -match 'System.Windows.Forms' } |
ForEach-Object { $_.GetExportedTypes() } |
ForEach-Object { $_.FullName }
Exemple : envoi de courriel
$expediteur = 'robot@example.com'
$destinataire = 'admin@example.com'
$serveur = 'smtp.example.com'
$objet = 'Message envoyé avec PowerShell ' + (Get-Date)
$texte = 'Ceci est le corps du message'
$message = New-Object System.Net.Mail.MailMessage
$message.Body = $texte
$message.From = $expediteur
$message.Subject = $objet
$message.To.Add($destinataire)
$client = New-Object System.Net.Mail.SmtpClient
$client.Host = $serveur
$client.Send($message)
Voir aussi Send-MailMessage.
Objets WSH (Windows Script Host)
# Raccourci de bureau
$cible = 'C:\temp\fichier.doc'
$lien = "$env:USERPROFILE\Desktop\MonLien.lnk"
$wshell = New-Object -ComObject WScript.Shell
$raccourci = $wshell.CreateShortcut($lien)
$raccourci.TargetPath = $cible
$raccourci.Save()
# Mappage de disque réseau
$wshNetwork = New-Object -ComObject WScript.Network
$wshNetwork.MapNetworkDrive('X:', '\\serveur\partage')
$wshNetwork.RemoveNetworkDrive('X:')