Powershell. Créer un fichier de classe pour tenir des Objets Personnalisés?
- Je utiliser Powershell personnalisée de la commande objet de tenir des points de données. Objets personnalisés crée qu'un seul objet et affecte une variable à elle. Peut Powershell aller plus loin et de créer de nouvelles classes d'objets qui peuvent être faites?
Dans les exemples ci-dessous, je stocke les trois ensembles de données: un nom de serveur, un timestamp, et les minutes depuis un événement a eu lieu sur le serveur.
Quand j'apprenais Powershell, j'ai mis tout cela dans un tableau à deux dimensions:
$record = @("Server","Timestamp","Minutes")
for ($j = 0; $j -lt 10; $j++){
$record += @("Server1","$(get-date)",$j)
sleep 60
}
$record | export-csv -path c:\record.csv -no type information
export-csv ne joue pas bien avec les tableaux, j'ai donc commencé à l'aide d'un objet personnalisé:
$record = @()
for ($j = 0; $j -lt 10; $j++){
$r = New-Object -TypeName PSObject
$r | Add-Member -MemberType NoteProperty -Name Server -Value ""
$r | Add-Member -MemberType NoteProperty -Name Timesteamp -Value ""
$r | Add-Member -MemberType NoteProperty -Name Minutes -Value ""
$r.server = "Server1"
$r.timestamp = "$(get-date)"
$r.minutes = "$j"
$record += $r
sleep 60
}
$record | export-csv -path c:\record.csv -no type information
Que les exportations de l'correctement, et de traiter avec les propriétés de l'objet est plus facile que de traiter avec des colonnes dans un tableau à deux dimensions.
Mais si je veux créer plusieurs objets personnalisés qui ne sont pas dans un tableau, je dois écrire le code de l'objet, encore et encore.
$server1 = New-Object -TypeName PSObject
$server1 | Add-Member -MemberType NoteProperty -Name Server -Value ""
$server1 | Add-Member -MemberType NoteProperty -Name Timesteamp -Value ""
$server2 = New-Object -TypeName PSObject
$server2 | Add-Member -MemberType NoteProperty -Name Server -Value ""
$server2 | Add-Member -MemberType NoteProperty -Name Timesteamp -Value ""
#ad nauseum
Que si Powershell design personnalisé classes en plus personnalisée objets? Comme OO langages de programmation n'? Quelque chose comme:
class record {
-MemberType NoteProperty -Name Server -Value ""
-MemberType NoteProperty -Name Timestamp -Value ""
-MemberType NoteProperty -Name Minutes -Value ""
}
$server1 = new-object -TypeName record
$server2 = new-object -TypeName record
$server3 = new-object -TypeName record
Est-ce possible dans Powershell?
- Les lecteurs de l'avenir: Notez que comme de Powershell 5.0 classes personnalisées sont une fonctionnalité intégrée à l'aide du mot-clé Class, qui prend en charge les propriétés, les méthodes, plusieurs constructeurs, etc, le tout en utilisant typique powershell syntaxe. Pas besoin d'apprendre le c# ou utiliser l'assortiment très intelligent solutions de contournement et kludges décrit ci-dessous.
- Ici, c'est le about_Classes page: docs.microsoft.com/en-us/powershell/module/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir des classes en PowerShell.
Vous pourrait utiliser une fonction comme une fausse constructeur pour vos objets personnalisés. Vous ne voudriez pas avoir à dupliquer votre code, et vous pouvez utiliser les drapeaux pour définir les propriétés de votre droit à partir de l'appel de la fonction. Voici un exemple:
Et quelques exemples de sortie:
Vous pouvez faire tout un tas de trucs avec des fonctions qui est hors de la portée de cette question. Au lieu de cela, découvrez about_functions_advanced.
Une autre option.
Propriétés
Vous pouvez remplacer le '$null', la valeur de la propriété message pour avoir une valeur initiale.
L'Hélice de l'objet est une table de hachage de touches (propriétés) et des valeurs (valeurs initiales).
Méthodes
Constructeurs
Le code ci-dessous décrit un constructeur. Le polymorphisme est réalisé à l'aide de [Parameter(Mandatory=$false)] pour affirmer ou non la mise à disposition du paramètre spécifié.
Le constructeur peut ensuite être appelée comme ceci:
Pour afficher le texte:
Les résultats seraient les suivants:
Bonjour!
Bonjour Tout Le Monde!