salut, pour eviter de caster tout le temps les fichiers xml en [Xml] à fin de les traiter j'ai ajouté deux nouveaux paramètres à 'get-content' AsXml et XPath pour que le traitement soit direct.
Function Get-Content { <# *************************************************************************** --------------------8<----------------------------------------- Ajout de deux nouveaux paramètres pour simplifier le traitement des fichiers XML: [-AsXml] [-XPath] Attention: l'expression Xpath est sEnSiBlE à La cAsSe Walid toumi --------------------8<----------------------------------------- PS> # Exemples d'utilisation: PS> $file = "$PSHOME\types.ps1xml" PS> $u = cat $file -As | Select-Xml -XP "//ScriptProperty" | Select -Expand Node PS> $u PS> $Xml = Get-Content $file -AsXml PS> $Xml.Types.Type[1..10] PS> Get-Content $file -AsXml -XPath "//Type[contains(Name,'Xml')]/Name" ************************************************************************** .ForwardHelpTargetName Get-Content .ForwardHelpCategory Cmdlet #> [CmdletBinding(DefaultParameterSetName='Path', SupportsTransactions=$true)] param( [Parameter(ValueFromPipelineByPropertyName=$true)] [System.Int64] ${ReadCount}, [Parameter(ValueFromPipelineByPropertyName=$true)] [System.Int64] ${TotalCount}, [Parameter(ParameterSetName='Path', Mandatory=$true, Position=0, ValueFromPipelineByPropertyName=$true)] [System.String[]] ${Path}, [Parameter(ParameterSetName='LiteralPath', Mandatory=$true, Position=0, ValueFromPipelineByPropertyName=$true)] [Alias('PSPath')] [System.String[]] ${LiteralPath}, [System.String] ${Filter}, [System.String[]] ${Include}, [System.String[]] ${Exclude}, [System.String] ${XPath}, [Switch] ${Force}, [Switch] ${AsXml}, [Parameter(ValueFromPipelineByPropertyName=$true)] [System.Management.Automation.PSCredential] ${Credential}) begin { try { $outBuffer = $null if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) { $PSBoundParameters['OutBuffer'] = 1 } $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Management\Get-Content', [System.Management.Automation.CommandTypes]::Cmdlet) $cmd = '' if($AsXml) { [void]$PSBoundParameters.Remove('AsXml') $cmd += ' | ForEach-Object {$fx=@()} {$fx+=$_} {$fx -as [Xml]}' if($XPath) { [void]$PSBoundParameters.Remove('XPath') $cmd += ' | Select-Xml -XPath $XPath | Select -expand Node' } } $ScriptCmd = [ScriptBlock]::Create( { & $wrappedCmd @PSBoundParameters }.ToString() + $Cmd ) $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin) $steppablePipeline.Begin($PSCmdlet) } catch { throw } } process { try { $steppablePipeline.Process($_) } catch { throw } } end { try { $steppablePipeline.End() } catch { throw } } }