Recherche de site Web

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.