Qu'en est-il des concepts tels que Class, Interface, Mixin dans PowerShell? Est-ce qu'il supporte OOP? Si oui, où puis-je lire à ce sujet?PowerShell prend-il en charge OOP?
Répondre
Vous pouvez définir de nouveaux types v2.0 PowerShell en utilisant l'applet de commande Add-Type
:
Description détaillée
L'applet de commande Add-Type vous permet de définir une classe .NET dans votre session Windows PowerShell . Vous pouvez ensuite instancier des objets (en utilisant la cmdlet New-Object) et utiliser les objets, comme vous le feriez avec n'importe quel objet .NET ob . Si vous ajoutez une commande Add-Type à votre profil Windows PowerShell, la classe sera disponible dans toutes les sessions Windows PowerShell.
Vous pouvez spécifier le type en spécifiant un assembly existant ou des fichiers de code source, ou vous pouvez spécifier le code source en ligne ou enregistré dans une variable. Vous pouvez même spécifier uniquement une méthode et Add-Type définira et générera la classe. Vous pouvez utiliser cette fonctionnalité pour effectuer des appels Platform Invoke (P/Invoke) à des fonctions non gérées dans Windows PowerShell. Si vous spécifiez le code source, Add-Type compile le code source co spécifié et génère un assembly en mémoire qui contient les nouveaux types .NET. Vous pouvez utiliser les paramètres de Add-Type pour spécifier une autre langue et un compilateur (CSharp est la valeur par défaut), les options du compilateur, les dépendances d'assembly, l'espace de nom de classe et les noms du type et l'assembly résultant.
help Add-Type
pour plus d'informations.
Aussi, voir:
Les offres de pipeline PowerShell avec des objets, pas seulement un flux de texte d'un pipeline Unix fait. Toutes les variables sont également des instances d'objets. Ce sont tous des objets .NET, BTW.
est ici une partie de la sortie d'un « ls » commande canalisée vers l'applet de commande get-membre:
PS C:\Documents and Settings\Administrator.DEV-3DPST1-SWK> ls | get-member
TypeName: System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
Create Method System.Void Create(DirectorySecurity directorySecurity), System.Void Create()
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)
CreateSubdirectory Method System.IO.DirectoryInfo CreateSubdirectory(String path), System.IO.Director...
Delete Method System.Void Delete(), System.Void Delete(Boolean recursive)
Equals Method System.Boolean Equals(Object obj)
GetAccessControl Method System.Security.AccessControl.DirectorySecurity GetAccessControl(), System....
GetDirectories Method System.IO.DirectoryInfo[] GetDirectories(String searchPattern), System.IO.D...
GetFiles Method System.IO.FileInfo[] GetFiles(String searchPattern), System.IO.FileInfo[] G...
GetFileSystemInfos Method System.IO.FileSystemInfo[] GetFileSystemInfos(String searchPattern), System...
GetHashCode Method System.Int32 GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetObjectData Method System.Void GetObjectData(SerializationInfo info, StreamingContext context)
GetType Method System.Type GetType()
get_Attributes Method System.IO.FileAttributes get_Attributes()
get_CreationTime Method System.DateTime get_CreationTime()
get membres affiche les membres de l'objet que vous conduit à lui. Vous pouvez voir que ce sont les membres réels de la classe System.IO.DirectoryInfo.
PowerShell est plus un langage grand public OOP. Il peut utiliser la plupart des .NET Framework mais il ne supporte pas nativement la création d'interfaces, de classes et certainement pas de mixins. .NET, sur lequel repose le système de types de PowerShell, ne prend pas en charge les mixins. PowerShell prend en charge l'ajout dynamique de propriétés et de méthodes à un objet existant via la cmdlet Add-Member. Add-Type est utile mais si vous devez échapper à C# ou à VB pour définir une classe ou une classe qui implémente une interface particulière, je ne considérerais pas que cette première classe supporte la création de classes/interfaces.
Si vous cherchez du matériel d'apprentissage gratuit, consultez Effective Windows PowerShell.
La version 5 de Powershell semble soutenir une partie de la POO traditionnelle.
Tout le crédit va à ce type: https://xainey.github.io/2016/powershell-classes-and-concepts/
Exemple d'une classe:
class myColor
{
[String] $Color
[String] $Hex
myColor([String] $Color, [String] $Hex)
{
$this.Color = $Color
$this.Hex = $Hex
}
[String] ToString()
{
return $this.Color + ":" + $this.Hex
}
}
Exemple d'une classe abstraite:
class Foo
{
Foo()
{
$type = $this.GetType()
if ($type -eq [Foo])
{
throw("Class $type must be inherited")
}
}
[string] SayHello()
{
throw("Must Override Method")
}
}
class Bar : Foo
{
Bar()
{
}
[string] SayHello()
{
return "Hello"
}
}
Un lien vers une solution est le bienvenu, mais s'il vous plaît assurez-vous que votre réponse est utile sans cela: [ajouter un contexte autour du lien] (// meta.stackexchange.com/a/8259) pour que vos autres utilisateurs aient une idée de ce que c'est et pourquoi c'est là, puis citez la partie la plus pertinente de la page que vous liez au cas où la page cible n'est pas disponible. [Les réponses qui sont un peu plus d'un lien peuvent être supprimées.] (// stackoverflow.com/help/deleted-answers) – Simon
- 1. OOP - Message passant en C#
- 2. Setters/Getters, Visibility [OOP] en PHP
- 3. Powershell ne charge pas le profil lors de l'exécution PSEXEC
- 4. Javascript OOP requête DOM
- 5. question de style OOP
- 6. PHP OOP question
- 7. OOP structure php5
- 8. Terminologie OOP: "Container" & "Collection"
- 9. oop instantiation Pratiques pythonic
- 10. Comment puis-je savoir quels opérateurs WQL sont pris en charge sur une classe utilisant powershell?
- 11. en utilisant system.thread.threadpool dans powershell
- 12. Javascript personnalisé "événement" écouteur, en utilisant l'implémentation du prototype OOP
- 13. comment mettre en œuvre jquery oop dans le site réel
- 14. Conception de classe OOP, Cette conception est-elle intrinsèquement «anti» OOP? Je me souviens
- 15. Segmentcontrol Couleur en charge?
- 16. Analyse orientée objet et différences OOP réelles
- 17. Exécuter des scripts PowerShell sans installer PowerShell?
- 18. Une autre question OOP dans Asp.net
- 19. OOD/OOP Etudes/Exercices de code
- 20. PowerShell - Conversion des ticks en temps
- 21. Problème XPATH en C# et PowerShell
- 22. Convertir la commande Bash xargs en PowerShell?
- 23. Execute PowerShell en tant qu'administrateur de C#
- 24. Incorporation de Powershell CTP 2 en C#
- 25. Problème de poulet à l'œuf OOP
- 26. Zend_Form et modèles de conception OOP
- 27. OOP design et Listes et collections (C#)
- 28. OOP: Bestish Practices: Faire parler deux classes
- 29. Approche OOP pour le système d'inventaire
- 30. Sortie Powershell
Bonne réponse, et très beau livre. Merci pour les deux! –