J'ai téléchargé la dernier version de mon "compilateur" préféré. Après quelques testes, je me suis rendu compte que plusieurs problèmes avait été résolue dans les dernières versions :
- Intégration natif des descriptions dans le champs détail de l'exe.
- Résolution des problèmes d'accents qui s'affichait mal.
- La fonction "Parcourir les dossiers" fonctionne également.
- Les faux positif avec les anti-virus semble également résolu.
Auparavant, j'étais obligé de modifier le code du compilateur pour contourner tout ces petites problèmes. Malheureusement les faux positif de l'anti-virus étais devenu vraiment très gênant. Du coup, j'ai "recompiler" tout mes applications avec la nouvelle version, et maintenant mes anti-virus ne râle plus du tout.
J'en ai profité pour moderniser l'interface d'Eco 7. Actuellement, je continue à moderniser son code. Je compte faire quelques modifications ici et là, et en particulier intégrer la base de données LiteDB.
Il y a quelques jours, j'ai appris que le https était devenu activable sur les blogs utilisant un domaine personnalisé. Je suis passé aussitôt sur le site bêta de Blogger (draft.blogger.com) pour activé la fonction HTTPS sur mon domaine personnalisé. Il faut un peu de temps pour que cela se mette en place. Après 24/48h le site est enfin accessible en https.
Pour que le site soit pleinement compatible http et https, j'ai du modifier le code de mes liens internes. Pour cela j'ai utilisé l'astuce suivant :
Généralement, les liens sont écrit sous la forme href="http://exemple.com". Si j'ouvre mon site en mode https, ce lien basculera le site en mode http. Pour corriger cela, je pourrai modifier mon lien pour qu'il ouvre la page en mode https en écrivant href="https://exemple.com". Malheureusement, si j'ouvre mon site en mode http, cela basculera le site en https. Pour éviter que le site bascule d'un mode à l'autre en cours d'exploration, l'astuce consiste à supprimer les mots "http:" et "https:" dans mes liens internes en utilisant la forme href="//exemple.com". Le navigateur comprendra alors qu'il faut conserver le protocole utilisé à l'ouverture du site et ne basculera plus inopinément entre les modes http et https.
Note du 2/3/2018 : Pour essayer de trouver une solution à mes problèmes d'indexations, j'ai basculé le site en full https.
Memo-LiteDB est un exemple d'utilisation des fonctions "FileStorage" de LiteDB. Ce programme ouvre un fichier RichTextBox depuis la base de données, et l'affiche dans la fenêtre "Mémo" après l'avoir décrypté à l'aide du mot de passe saisi à l'ouverture du programme. A la fermeture de la fenêtre, le fichier est enregistré dans la base de données LiteDB après l'avoir crypté.
Memo-LiteDB
Ce programme nécessite la Dll "LiteDB.dll" v5.0.10. Créer un dossier "ldb" au même niveau que le script. Puis télécharger la Dll dans le dossier "ldb".
Dans cet article, nous allons voir l'utilisation de la base de données LiteDB dans un environnement Windows PowerShell. Nous allons créer la base et ses collections. Nous verrons ensuite l'utilisation des instructions Insert, Update, Delete, Find, les requêtes [LiteDB.Query], et le stockage de fichiers.
Référence
Toujours à la recherche d'une base de données légère pour mes scriptes PowerShell, j'ai découvert LiteDB. Cette base de données
"sans serveur" de type NoSQL se présente sous la forme d'une simple Dll de moins de 300Ko. Elle ne nécessite ni installation, ni droit administrateur. LiteDB est donc facilement portable pour peu que le FrameWork 3.5 (ou compatible) soit installé sur le système.
Dans l'exemple ci-dessous, j'utilise la version 3.1.4 car la version 4.1.0 refusait de se charger sous certain environnement vieillissant (mais encore utilisé en entreprise).
################################################################
#
# Base de données : LiteBD v3.1.4
# Powershell.sekki.fr
#
# 1 - Créer un dossier ldb à côté du script.
# 2 - Télécharger et copier LiteDB.dll+xml dans le dossier ldb.
#
################################################################
#Ajouter un enregistrement dans la base de données.
$bson["_id"] = [LiteDB.ObjectId]::NewObjectId()
$bson["date"] = date
$bson["Nom"] = $nom
$bson["Prix"] = $prix
$bson["Cat"] = $cat
[void]$coll.Insert($bson) #Insére le document dans la collection.
}
#Modifier un enregistrement.
$query = $coll.Find([LiteDB.Query]::eq("Nom","Sekki"))
foreach ($q in $query)
{
$q["Cat"] = "A"
[void]$coll.Update($q)
}
#Supprimer un enregistrement : Méthode 1.
#$query = $coll.Find([LiteDB.Query]::eq("Nom","Sekki"))
#foreach ($q in $query)
# {
# $coll.Delete($q["_id"])
# }
#Supprimer un enregistrement : Méthode 2.
#$nb = $coll.Delete([LiteDB.Query]::eq("Nom","Jumbor"))
###Les requétes.
#Renvoi les articles dont le nom exact est :
$query = $coll.Find([LiteDB.Query]::eq("Nom","Sekki"))
#Renvoi les articles dont le prix est plus grand que :
$query = $coll.Find([LiteDB.Query]::gt("Prix",30))
#Renvoi les articles dont le prix est plus petit que :
$query = $coll.Find([LiteDB.Query]::lt("Prix",30))
#Renvoi les articles dont le nom commence par :
$query = $coll.Find([LiteDB.Query]::startswith("Nom","S"))
#Renvoi tout les enregistrements :
$query = $coll.Find([LiteDB.Query]::all())
###Charger des fichiers dans la base de données.
#Insérer/remplacer un fichier dans la base de données :
#$db.FileStorage.Upload("$/Fichiers/file1.jpg", $curpath+"\file1.jpg")
#Lire un fichier dans la base de données et l'enregistrer sur le disque local :
#[LiteDB.LiteFileInfo] $file = $db.FileStorage.FindById("$/Fichiers/file1.jpg")
#$file.SaveAs($curpath+"\file1.jpg")
#Lire un fichier dans la base de données et le charger dans une variable :
#[LiteDB.LiteFileInfo] $file = $db.FileStorage.FindById("$/Fichiers/file1.jpg")
#$image = [System.Drawing.Image]::FromStream($file.OpenRead())
#Pause
if (!$psISE) { Write-Host -NoNewLine "Press any key to continue..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") }
#Compresser la base de données.
[void]$db.Shrink()
Dans cet article, nous allons voir l’accès aux bases PostgreSQL avec Windows PowerShell et le Data Provider "Ngpsql.dll". L'exemple suivant montre comment se connecter sur une base PostgreSQL, et utilisation des instructions Create Table, Insert, Query, Update et Drop Table.
Référence
Avant d’exécuter le script, notez que j'ai préalablement installé un serveur "PostgreSQL Portable" sur lequel j'ai créé la base de données "Base1". J'ai également créé un dossier "npgsql" au même niveau que mon script. Ce dossier contient contient les fichiers du Data Provider NpgSQL. La table et les données peuvent être créé ensuite à l'aide des exemples de requêtes SQL présent dans le script.
#---------------------------------------------------------------------------#
#Voici la liste de différentes requêtes SQL que vous pouvez essayer.
#Supprimez le # devant la requête SQL que vous souhaitez tester.
#---------------------------------------------------------------------------#
#Créer une table.
#$psQuery = "CREATE TABLE Table1(Colonne1 nchar(16) PRIMARY KEY NOT NULL, Colonne2 nchar(16));"
#Ajouter une ligne.
#$psQuery = "INSERT INTO Table1(Colonne1,Colonne2) VALUES ('Jumbor','PowerShell');"
#Lire une table.
#$psQuery = "select * from Table1;"
#Lire une ligne.
#$psQuery = "select * from Table1 WHERE Colonne1 = 'Jumbor12';"
#Modifier une valeur.
#$psQuery = "UPDATE Table1 SET Colonne2 = 'PowerShell 2.0' WHERE Colonne2 = 'PowerShell';"
#Supprimer une ligne.
#$psQuery = "DELETE FROM Table1 WHERE Colonne1 = 'Jumbor12';"
#Supprimer une table.
#$psQuery = "DROP TABLE Table1;"
#---------------------------------------------------------------------------#
Cet exemple montre comment mettre en place une icône dans la zone de notification (System Tray). Pour cela, nous allons construire notre l’icône avec l'object System.Windows.Forms.NotifyIcon auquel nous allons associer un menu contextuel. Le menu contextuel permettra d'afficher la fenêtre lorsque celle-ci est masquer, de simuler un popup dans la zone de notification, et de quitter l'application.
#Construction de l'icone pour la zone de notification.
#Attention : Mettre un chemin valide pour le fichier .ico.
$TrayIcon = New-Object System.Windows.Forms.NotifyIcon
$TrayIcon.Icon = "c:\xxx.ico" #Image au format .ico.
$TrayIcon.Text = "TrayIcon" #Texte de l'info bulle.
$TrayIcon.ContextMenu = $menuT1 #Menu contextuel.
$TrayIcon.Visible = $True
#Fenêtre.
$formA = New-Object System.Windows.Forms.form
$formA.Size = New-Object Drawing.Point 200,90
$formA.Text = "Tray Icon" #Titre de la fenêtre.
#Masque la fenetre dans la barre de taches.
$formA.ShowInTaskbar = $false
#Bouton pour afficher un popup dans la zone de notification.
$boutonA2 = New-Object Windows.Forms.Button
$boutonA2.Location = New-Object Drawing.Point 5,28
$boutonA2.Size = New-Object System.Drawing.Size(85,23)
$boutonA2.text = "Popup"
$boutonA2.add_click({
$TrayIcon.BalloonTipTitle = "Tray Icon"
$TrayIcon.BalloonTipText = $textA1.Text
$TrayIcon.BalloonTipIcon = "Info" #None,Info,Warning,Error
$TrayIcon.ShowBalloonTip(300000)
})
#Champ texte pour changer le texte du popup.
$textA1 = New-Object Windows.Forms.TextBox
$textA1.Location = New-Object Drawing.Point 5,5
$textA1.Size = New-Object System.Drawing.Size(175,23)
$textA1.Text = "Changez moi !"
#Afficher la fenêtre.
$formA.controls.add($boutonA1)
$formA.controls.add($boutonA2)
$formA.controls.add($textA1)
[void][System.Windows.Forms.Application]::Run($formA)
#Fin.
$TrayIcon.Dispose()
Merci de remplacer le chemin "c:\xxx.ico" dans l'exemple par un chemin valide vers un fichier .ico (celui de votre choix). Sinon vous obtiendrez une erreur lors de l’exécution de l'exemple.