Question Stockage de donnée binaire dans un script (Résolu)

Plus d'informations
il y a 16 ans 1 semaine #2164 par Gabriel
Salut a tous

Je voulais savoir si il etait possible de stocker des données de type binaire dans un script. Par exemple je veux faire un script qui change l'icone d'un repertoire et j'aurais voulu que la donnée soit dans le script et pas dans un fichier a coté. En fait en shell linux on peut faire de telles choses.

Tiens tant qu'on y est, est-ce qu'on peut stocker des données qu'on modifie en temps reel. Genre faire un script qui scanne une OU (ou il y a 10 machines) par exemple qui stocke dans le fichier du script la liste des machines (genre une ligne separé par une virgule), pour pouvoir travailler en mode deconnecté (par rapport au domaine), ensuite pendant l'execution du script on stocke le resultat (genre zero ou un) dans le meme fichier toujours...

Ok ca fait 2 question en une...:P<br><br>Message édité par: Robin, à: 24/04/08 21:35

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

Plus d'informations
il y a 16 ans 1 semaine #2172 par Laurent Dardenne
Salut,
tonic8 écrit:

Je voulais savoir si il etait possible de stocker des données de type binaire dans un script.

Tu peux tout stocker dans le fichier, le pb ensuite est de retrouver l'info.
Si on regarde un bloc de signature placé en fin de script :

# SIG # Begin signature block
# MIIFQgYJKoZIhvcNAQcCoIIFMzCCBS8CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
....
# GzPJOVlC
# SIG # End signature block

on peut retrouver \&quot;l'index\&quot; de la première ligne de cette signature :
[code:1]
if ( ([String]$_) -match '^# SIG # Begin signature block')
{ fait qq chose...
[/code:1]
Mais dans ce cas précis si tu signes tes scripts, cette approche ne fonctionnera pas puisque la signature sera invalidée par tes modifications.
Il est possible d'utiliser un Alternative Data Stream, j'ai un script en cours sur le sujet.
En attendant sur le blog de MOW il existe un exemple autour d'un fichier d'extension, de mon coté j'ai une approche différente. De plus cette possible solution nécessite une DLL.
tonic8 écrit:

Par exemple je veux faire un script qui change l'icone d'un repertoire

Un fichier ressources est préférable dans ce cas mais cela ne résoud pas ton pb. Et d'utiliser un fichier ressources pour tout tes scripts ?
tonic8 écrit:

Tiens tant qu'on y est, est-ce qu'on peut stocker des données qu'on modifie en temps reel.

Après avoir lue les données le mieux est de les traiter dans un flux en mémoire puis de les écrire en fin de traitement.

Tout ces traitements devront donc être dupliqués dans chaque script, bonjour la maintenance :laugh:

C'était possible en batch mais je ne sais pas comment PowerShell gére le fichier .ps1 pendant l'exécution du script.
Techniquement je pense que c'est possible mais ne soit pas surpris en cas de succès si on considére ton script comme une usine à gaz.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 semaine #2175 par Gabriel
Hello merci

L'idee viens d'un language de script que j'utilise de temps en temps Rebol www.rebol.com qui gere les données et le code de la meme facon dans des blocs.

Le stockage de données binaire dans son cas est simplement une variable genre
[code:1]smiley: load to-binary decompress 64#{
eJxz8n3BwgAGZkCsAcQiUMzIIMEAA0LcEAwDB2gAGFABabr+/0dBRJiARReqCWRq
xK0dXSMawKsdRQFW/+LQS0AjXu1E+RSHsweLXrSwJRTU+BRjcMlJGMQnD6I1EqWd
mOxAVj5CN4HE/EsfwMAAAKQP0/PoBAAA
}[/code:1]

a la variable smiley est assigné le déhachage 64 de la string qui suit. (en fait comme dans un e-mail quand tu attache un jpeg ou un smiley, le protocole de base convertit le binaire en texte faut juste savoir le reconvertire dans l'autre sens

Quand a sauver les données dans le fichiers ps1 propre ouais je sais c'est une belle usine a gaz j'y est repensé ensuite :blush: , mais bon ca peut servir a un jour. on oublie cette question \&quot;gazée\&quot;

Meme si je crée un fichier ressource par exemple qui a les 10 icones que je vais utilisé dans mon script (gerne un ICL, ca peut contenir plusieurs ICO) ben faut pouvoir l'ouvrir... pas dis que je puisse m'en servir sans une dll a coté...:( et surtout c'est un container pas vraiment modifiable sans un soft tiers... pour mettre a jour l'icl hummmphh

Mais merci

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

Plus d'informations
il y a 16 ans 1 semaine #2176 par Laurent Dardenne
tonic8 écrit:

Quand a sauver les données dans le fichiers ps1 propre ouais je sais c'est une belle usine a gaz j'y est repensé ensuite :blush: , mais bon ca peut servir a un jour. on oublie cette question \&quot;gazée\&quot;

Je n'ai pas pris le temps de m'étendre sur ce point, il n'y a de jugement de ma part, ce que je voulais dire c'est que ton entourage professionnel peut juger cette solution comme compliqué alors qu'elle que relativement complexe. On voit bien que si PS proposait cette fonctionnalité à l'identique de Rebol, cela ne serait pas perçu comme une usine à gaz.
Outre le temps passé à le mettre au point, il t'en faudrait encore plus pour défendre cette solution.
C'est ce que j'ai pu voir dans des projets de dev où souvent les chefs de projet, pas tous heureusement, préfére les solutions simple voir parfois simpliste car le niveau de compétence demandé pour reprendre le projet n'est pas le même.
tonic8 écrit:

Meme si je crée un fichier ressource ..
pas dis que je puisse m'en servir sans une dll a coté

Pas de soucis de ce coté là, le fond de commerce de PowerShell c'est .NET il y a donc beaucoup de solutions à portée de main. Faut juste creuser le SDK :lol:

Dans ce post , consulte dans le fichier PackageConvert-Form.ps1, les fonctions
CompileRessources,
AjouteGestionRessources

On utilise une classe .NET pour gérer le fichier de ressources, voilà brut de fonderie les sections de code concernées
[code:1]

# Chargement des assemblies externes
...
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Resources\&quot;«»)
...
#Test auparavant la présence du fichier de ressources

#Gestion du fichier des ressources
$Reader = new-Object System.Resources.ResourceReader(\&quot;$RessourcesPath\&quot;«»)
$Ressources=@{}
# On doit construire une hastable sinon on doit itérer la liste à chaque accés
$Reader.GetEnumerator()|% {$Ressources.($_.Name)=$_.value}
...
# Création des composants
$button1 = new-object System.Windows.Forms.Button
...
#
# button1
#
$button1.BackgroundImage = [System.Drawing.Image] $Ressources[\&quot;button1.BackgroundImage\&quot;]
...
#
# toolStripButton1
#
$toolStripButton1.DisplayStyle =[System.Windows.Forms.ToolStripItemDisplayStyle]::Image
$toolStripButton1.Image = [System.Drawing.Image] $Ressources[\&quot;toolStripButton1.Image\&quot;]
...
#Libération des ressources
$Reader.Close() #Appel Dispose
$Form1.Dispose()
[/code:1]
Je n'ai plus les scripts d'étude de ce problème sous la main, peut être dans mes sauvegardes, mais si tu as un soucis n'hésite pas.
Dans d'autre cas il est possible d'utiliser des flux binaires.

Comme je te le disais j'ai réfléchi sur une problèmatique +- identique autour des Streams. Je souhaitais déployer un script avec un stream ou+ contenant du code.
Comme la v1 de PS ne propose pas de package je voulais réduire le nombre de fichiers à livrer.
Mais je ne suis pas sûr que cette approche soit accepté en poussant le bouchon, on peut envisager un fichier particulier à la Office qui eux utilisent cette structure de flux pour les données externes (images,son...) mais d'un seul tenant.

Come quoi tu n'es pas le seul à cogiter sur le sujet :)

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 semaine #2177 par Gabriel
ouch ca complique quand meme le script, alors qu'en rebol ca prend 5-6 mots pour ca...:P

:-) en cherchant je suis tombé sur ca :woohoo:

blogs.msdn.com/powershell/archive/2007/0...s-now-available.aspx

il y a une commande spécifique
[convert]-data : Encoding and decoding utilities including Base64, SHA1, MD5, BinHex, and more.

mais c'est pôoo juste c'est payant :angry:

en prenant un truc plus root doit bien exister une classe dans le sdk pour l'envoi de mail et la reception de mail, donc \&quot;Encode/decode binary files to/from text\&quot;... mais la il se fait tard dodo...

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

Plus d'informations
il y a 16 ans 6 jours #2179 par Laurent Dardenne
Salut,
tonic8 écrit:

ouch ca complique quand meme le script,

Je dirais que c'est le besoin qui n'est pas simple à implémenter sous PS ;)
A l'origine le projet PS était de faciliter les tâches d'administration système pas celles du développement systèmes.
tonic8 écrit:

alors qu'en rebol ca prend 5-6 mots pour ca...

En étudiant le pb tu peux peut-être trouver une solution élégante.
tonic8 écrit:

en prenant un truc plus root doit bien exister une classe dans le sdk

Oui en cherchant \&quot;PowerShell Base64\&quot; on trouve d'autres pistes gratuites : le blog de MS de powerShell,PowerShell Community Extensions,...

Tutoriels PowerShell

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

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