Question Comment retrouver les ressources localisées ?

Plus d'informations
il y a 5 ans 5 mois #18804 par Laurent Dardenne
Le code suivant permet de retrouver les ressources localisées des assemblies Powershell :
[code:1]

#Adapté de CmdletExtensionLibrary.ps1 de Kirk Munro
Import-Module PSWorkflow

#Force le chargement de
#Microsoft.PowerShell.Activities.resources.dll
Workflow Test { $args;\"Test erreur\"}

$ResourceString=@{}
[appdomain]::currentdomain.GetAssemblies()|
Where {$_.location -match \"resources.dll$\"}| #récupère uniquement les assemblies resources
Foreach {
$CurrentAssembly=$_
Write-verbose $CurrentAssembly.Location
#On ne prend, dans le nom de fichier assembly, que la partie 'namespace'
#et on remplace les points par des tirets
$AssemblyName=(split-path $_.Location -leaf).Replace(\".resources.dll\",\"\"«»).Replace(\".\",\"_\"«»)
Write-Debug $AssemblyName
$ResourceString.\"$AssemblyName\"=@{}
$ResourceString.\"$AssemblyName\"=$ResourceString.\"$AssemblyName\"| Add-Member NoteProperty Location $_.Location -pass
#récupère les noms des ressources du fichier resources courant
$_.GetManifestResourceNames()|
Foreach {
$CurrentResourceName=$_
#Supprime le postfixe
$ResourceName= $_ -replace '.resources$',\"\"
$ResourceNameH=$ResourceName.Replace(\".\",\"_\"«»)
Write-Debug \"`t$ResourceName\"
$ResourceString.\"$AssemblyName\".\"$ResourceNameH\"=@{}
#Crée un gestionnaire de ressources
$rm=new-object System.Resources.ResourceManager($ResourceName,$CurrentAssembly)
#récupère les ressources du fichier courant
($rm.GetResourceSet((Get-Culture),$true,$true)).GetEnumerator()|
Foreach {
$NameKeyResource=$_.Key.Replace(\".\",\"-\"«»)
Write-debug \"`t`t$NameKeyResource\"
#Insére la clé et la valeur dans la table
$ResourceString.\"$AssemblyName\".\"$ResourceNameH\".\"$NameKeyResource\"=$_.Value
}
}
}
[/code:1]
Lister les clés des hashtables imbriquées :
[code:1]
$ResourceString.getenumerator()|% {
$Level1=$_.Name
$_.Value.getenumerator()|% {
$Level2=$_.Name
$_.Value.getenumerator()|? Name -match 'supported'|% { \"$level1.$level2.\"+ $_.Name}
}
}
[/code:1]
Retrouver les possibles messages d'erreur, entre autres, lors du parsing d'un workflow :
[code:1]
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.GetEnumerator()|
? name -ne 'Xml_cmdletsOverObjectsXsd'|
fl name,value

#Exemple d'accés à une des clés listées
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.SubExpressionNotSupported
[/code:1]
La clé suivante contient la version du XSD utilisé lors de la génération d'un fichier CDXML :
[code:1]
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.Xml_cmdletsOverObjectsXsd
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 10/02/15 10:26

Tutoriels PowerShell

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

Plus d'informations
il y a 5 ans 4 mois #18984 par Laurent Dardenne
Une correction permettant de charger les ressources de Workflow :
[code:1]
Import-Module PSWorkflow

#Force le chargement de
#Microsoft.PowerShell.Activities.resources.dll
Workflow Test { $args;\&quot;Test erreur\&quot;}
[/code:1]

Tutoriels PowerShell

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

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