Question Variable fichier .inf

Plus d'informations
il y a 5 ans 5 mois #19316 par lepatriot
Réponse de lepatriot sur le sujet Re:Variable fichier .inf
Merci! C'est pas mal plus clair. :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 ans 5 mois #19318 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Variable fichier .inf
Au cas où une évolution de la fonction de création d'objet à partir de la variable $Matches.
Les captures nommées optionnelles sont désormais créées dans l'objet final avec une valeur $null.
Ainsi tous les objets possèdent le même nombre de propriété :
:
[code:1]
function New-MatchesObject{
#A partir d'une chaîne de caractères,
#construit un objet personnalisé à l'aide d'une regex
#utilisant des captures nommées.

#Exemple :
# #hashtable de paramètrages
# $MyObject=@{
# #hashtable de création d'objets
# SMB=@{
# #Ces entrées portent les mêmes noms
# #que les paramètres de la fonction New-MatchesObject.
# #Ce qui autorise le splatting
#
# #Hashtable de création d'un objet
# #Exemple : analyse d'attribut AD extensionAttributeN
# Res_CN=@{
# #Nom du type affiché par Get-member ou $Variable.PsObject.TypeNames
# TypeName='MY.SMB.Res_CN'
# #Expression régulière contenant des captures nommées
# #celles-ci seront utilisées pour construire des propriètés d'objets PS personnalisés
# Regex='^extensionAttribute(?<Type>1)#CN=(?<CN>.*?),'
# #On supprime dans la variable automatique $Matches les clés indiquées
# Keys=0,1
# }
#
# Res_DN=@{
# TypeName='MY.SMB.Res_DN'
# Regex='^extensionAttribute(?<Type>1)#(?<DistinguishedName>.*$)'
# Keys=0,1
# }
# };
# #Others=@{...}
# }#$MyObject
#
# $S=\"extensionAttribute1#CN=MyCN,...\"
#
# #Le splatting ne fonctionne avec @Myobject.SMB.Res_CN
# $Parameters=$Myobject.SMB.Res_CN
# $o=New-MatchesObject $S @Parameters
# $o|gm
# $O
#
# $S2=\"extensionAttribute1#MyDN\"
# $Parameters=$Myobject.SMB.Res_DN
# $o2=New-MatchesObject $S2 @Parameters
# $o2|gm
# $O2

param (
#Objet sur lequel on exécute la regex
[Parameter(Mandatory=$true,position=0)]
[ValidateNotNullOrEmpty()]
$InputObject,

#Nom du type de l'objet PS
[Parameter(Mandatory=$true,position=1)]
[ValidateNotNullOrEmpty()]
[String] $TypeName,

#Expression régulière appliquée sur le paramètre InputObject
[Parameter(Mandatory=$true,position=2)]
[ValidateNotNullOrEmpty()]
[String] $Regex,

#En cas de succès de la regex,
#on supprime les noms de clé indiquées dans la hashtable $Matches
[Parameter(Mandatory=$false,position=3)]
[ValidateNotNullOrEmpty()]
#la clé 0 contient l'intégralité de ligne analysée
[Object[]] $Keys=0
)
Function Select-NamedCapture {
Param( [string] $RegexStr )
$Pattern='\?\<(.*?)\>'
$Regex = new-object regex $Pattern

$CurrentMatch = $Regex.match($RegexStr)

if (!$CurrentMatch.Success)
{ Write-debug \"Echec :$RegexStr\" }
else
{ $CurrentMatch.Groups[1].Value }

while ($CurrentMatch.Success)
{
$CurrentMatch = $CurrentMatch.NextMatch()
if ($CurrentMatch.Success)
{ $CurrentMatch.Groups[1].Value }
}
}#Select-NamedCapture
Write-debug \"New-MatchesObject\"

$NamesOfCaptures=Select-NamedCapture -RegexStr $Regex
if ($InputObject -match $Regex)
{
#Conflit possible entre un nom de capture numérique ('1') et le numéro d'un groupe : 1
#dans ce cas on 'perd la capture :
# #$Str=\"^(?<11>toto) (titi)\"
# $Str=\"^(?'1'toto) (titi)\"
# 'toto titi' -match $str
#todo $Matches.Keys

$Keys|
Foreach {
Write-Debug \"Remove key = $_\"
#Pour les captures optionnelles,
#si la clé n'existe il n'y a pas d'erreur
$matches.Remove($_)
}
Compare-Object ([string[]]$matches.Keys) $NamesOfCaptures|
Select -ExpandProperty InputObject|
Select-Object {$Matches.Add($_,$Null)}
Write-debug \"Construction d'un objet de type : $($TypeName)\"
$Object=New-Object PSCustomObject -Property $Matches
$Object.PsObject.TypeNames.Insert(0,$TypeName)
Write-Output $Object
}
}#New-MatchesObject
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.540 secondes
Propulsé par Kunena