PowerShell : Quand utiliser Add-Type et New-Object ?
Dans cet article de blog, je vais discuter de quand vous devez ajouter des classes avec Add-Type et quand vous pouvez fournir des classes avec New-Object. Je dirais, commençons.
New-Object
Classes .NET prédéfinies : PowerShell rend certaines classes .NET prédéfinies directement disponibles sans que vous ayez besoin de les charger avec « Add-Type ».
Vous pouvez simplement utiliser « New-Object » pour créer des instances de ces classes. Cela inclut de nombreuses classes couramment utilisées telles que « System.String », « System.DateTime », « System.IO.FileInfo ».
Voici quelques exemples :
$player = New-Object System.Media.SoundPlayer "$env:windir\Media\windows logon.wav" -Verbose
$player | Get-Member
$player.PlayLooping() # Methode tu etwas ==> Looping
$player.Stop() # Methode ==> Stop
[System.Math]::Round('123.6',0)
Add-Type
Classes définies par l'utilisateur ou assemblies .NET externes : Si vous avez créé une classe .NET définie par l'utilisateur ou si vous souhaitez accéder à des fonctions et classes dans des assemblies .NET externes qui ne sont pas disponibles par défaut dans PowerShell, vous devez utiliser “Add-Type” pour charger la classe ou l'assembly au moment de l'exécution. Après cela, vous pouvez utiliser “New-Object” pour créer des instances de ces classes chargées.
Voici quelques exemples :
[Microsoft.VisualBasic]::InputBox("Enter a computer name", "Computer") # Error. Wird nicht gefunden
Add-Type -AssemblyName Microsoft.VisualBasic # adds a .NET class to this session
$computer = [Microsoft.VisualBasic.Interaction]::InputBox("Enter a computer name", "Computer")
$Test = Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue
If ($Test.Status -eq 'Success') {
[Microsoft.VisualBasic.Interaction]::MsgBox("Test for $computer successful.", "OKOnly,SystemModal,Information", "Success")
}
else {
[Microsoft.VisualBasic.Interaction]::MsgBox("Test for $computer failed.", "OKOnly,SystemModal,Critical", "Error")
}
Au fait, vous pouvez lister toutes les classes prédéfinies qui sont accessibles sans avoir à les charger dans la session.
Get-TypeData -TypeName '*'
J'espère que c'était utile et bien expliqué. À la prochaine fois.
