Question
Stockage de donnée binaire dans un script (Résolu)
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
- Messages : 248
- Remerciements reçus 1
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...<br><br>Message édité par: Robin, à: 24/04/08 21:35
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
tonic8 écrit:
Tu peux tout stocker dans le fichier, le pb ensuite est de retrouver l'info.Je voulais savoir si il etait possible de stocker des données de type binaire dans un script.
Si on regarde un bloc de signature placé en fin de script :
on peut retrouver \"l'index\" de la première ligne de cette signature :# SIG # Begin signature block
# MIIFQgYJKoZIhvcNAQcCoIIFMzCCBS8CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
....
# GzPJOVlC
# SIG # End signature block
[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:
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 ?Par exemple je veux faire un script qui change l'icone d'un repertoire
tonic8 écrit:
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.Tiens tant qu'on y est, est-ce qu'on peut stocker des données qu'on modifie en temps reel.
Tout ces traitements devront donc être dupliqués dans chaque script, bonjour la maintenance
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.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
- Messages : 248
- Remerciements reçus 1
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 , mais bon ca peut servir a un jour. on oublie cette question \"gazée\"
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
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.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 , mais bon ca peut servir a un jour. on oublie cette question \"gazée\"
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:
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 SDKMeme si je crée un fichier ressource ..
pas dis que je puisse m'en servir sans une dll a coté
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(\"System.Resources\"«»)
...
#Test auparavant la présence du fichier de ressources
#Gestion du fichier des ressources
$Reader = new-Object System.Resources.ResourceReader(\"$RessourcesPath\"«»)
$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[\"button1.BackgroundImage\"]
...
#
# toolStripButton1
#
$toolStripButton1.DisplayStyle =[System.Windows.Forms.ToolStripItemDisplayStyle]::Image
$toolStripButton1.Image = [System.Drawing.Image] $Ressources[\"toolStripButton1.Image\"]
...
#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.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
- Messages : 248
- Remerciements reçus 1
en cherchant je suis tombé sur ca
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
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 \"Encode/decode binary files to/from text\"... mais la il se fait tard dodo...
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
tonic8 écrit:
Je dirais que c'est le besoin qui n'est pas simple à implémenter sous PSouch ca complique quand meme le script,
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:
En étudiant le pb tu peux peut-être trouver une solution élégante.alors qu'en rebol ca prend 5-6 mots pour ca...
tonic8 écrit:
Oui en cherchant \"PowerShell Base64\" on trouve d'autres pistes gratuites : le blog de MS de powerShell,PowerShell Community Extensions,...en prenant un truc plus root doit bien exister une classe dans le sdk
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Stockage de donnée binaire dans un script (Résolu)