Docker et Portainer part 1 – Les conteneurs pour les nuls

Docker et Portainer

Bonjour à tous, aujourd’hui je commence la série de post sur Docker et Portainer suite à la migration du site sur le nouveau serveur. Et pour me faciliter les futures migrations, je me suis enfin décidé à « dockerisé » les applis que j’ai sur la machine… et comme ça je serai pas seul à être confiné dans cette histoire.

Pour votre culture le changement de serveur fait suite à la panne sur le dernier que j’ai décrit ici. Du coup, j’ai en profité pour faire le passage au SSD, ipv6 en natif via l’hébergeur, passage à Debian 10 et j’ai rapatrié le serveur en France aussi tant qu’a y être.

C’est quoi Docker ?

Un Docker, ça ressemble à une VM, ça a le gout et l’odeur d’une VM, mais c’est pas une VM. Docker, c’est le principe d’isolation du système d’exploitation sur machine virtuelle mais pour les applications. Comme le dit Wikipédia : « l’idée c’est empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n’importe quel serveur« . Et au lieu de virtualiser le hardware, un conteneur « virtualise » plutôt l’accès à l’OS via une API (et c’est … Lire la suite

Interroger une base PostGreSQL en PowerShell

Interroger une base PostGreSQL en PowerShell

Bonjour à tous, aujourd’hui on va intéresser aux bases SQL et PowerShell. Et plus exactement comment interroger une base PostGreSQL en PowerShell. Pour cela on va devoir s’y connecter, faire une requête, lire nos résultats en PowerShell et clore la connexion.

Je choisit volontairement PostGreSQL car (j’ai eu besoin de le faire a boulot, déjà) il nécessite que l’on installe au préalable le driver ODBC pour se connecter à la base. En effet si vous utiliser un serveur MSSQL, les dépendances nécessaires sont (en général) déjà livrées avec Windows.

Pour obtenir ce pilote vous pouvez vous connecter sur le site de PostGreSQL ici, télécharger puis installer le fichier MSI. Vous pouvez vérifier que celui ci est bien déployé en allant dans le panneau de configuration-Outils d’administration-Sources de données ODBC (32 ou 64 bits). Les connecteurs PostgreSQL UNICODE et ANSI devrait être présent.

A partir de là, on peut démarrer le code de notre module PowerShell. La première étape consiste à établir la connexion à la base. Et pour cela j’ai développé la Cmd-Let Get-PSSQLDBConnexion ci dessous :

Function Get-PSSQLDBConnexion{
    param(
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $Server,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $Port,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $DBName,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $Username,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [SecureString] $Password
    )
    
Lire la suite

Auto élévation de privilèges en PowerShell

élévation de privilèges en PowerShell

Salut à tous, aujourd’hui on va s’intéresser au RunAs dans PowerShell, et plus particulièrement comment faire une élévation de privilèges en PowerShell. J’ai récemment eu besoin de distribuer un script à quelques utilisateurs, tous administrateur local de leur poste, pour qu’ils l’exécutent en tant qu’admin.

Je vous passe les détails, mais comme il n’y avait pas que des utilisateurs avancés en PowerShell, il me fallait un mode « clic-clic un peu propre » pour qu’ils lancent le script via un batch à la souris.

D’autant plus que le script jardine dans le registre et les fichiers système tout en utilisant des paramètres interactifs, en chemin relatif (puisqu’on ne sait pas où sur le poste nos utilisateurs vont exécuter le livrable). Et le tout sur des configuration de postes sécurisés qui ne me laissaient pas faire ce que je voulais via le traditionnel runas.exe.

Le diable est dans les détails… J’ai galéré un moment pour trouver un enchainement propre de mon .cmd et du .ps1, qui permet de s’affranchir des problématiques de chemin de fichiers, sans utiliser runas.exe.

Au final je m’en suis sortie comme ça.

Reconstruction du chemin dans le script CMD

C’est la partie la plus simple, vous … Lire la suite

Get-Date en "locals" US – PowerShell

Get-Date en "locals" US

Salut à tous, aujourd’hui une brève astuce dont on a eu besoin au boulot : comment sortir un Get-Date en « locals » US (ou une autre timezone, hein). En tout cas un local différent de celui de votre console. Exemple, si je saisi dans ma console :

(Get-Date).tostring("MMM d HH:mm:ss")
déc. 12 15:17:04

Je me retrouve avec un bel accent bien français sur « é » de « décembre ».

Sauf que parfois souvent, on a besoin que le format de sortie soit homogène entre différentes machines sur tout un parc. Par exemple, quand toutes ces machines parlent à un unique SIEM (au hasard… Splunk ?). C’est beaucoup plus simple si le timestamp arrive dans le même pattern quelque soient les sources.

Et donc, comment qu’on fait pour sortir un Get-Date en « locals » US ? Tout simplement, comme ça :

$LocaleUS = New-Object System.Globalization.CultureInfo("en-US")
(Get-Date).tostring("MMM d HH:mm:ss",$LocaleUS)
Dec 12 15:22:22 

Vous la voulez en UTC votre date, en plus ? Histoire que tout le monde parle dans le même référentiel ? Rien de plus simple :

$Timestamp = ((Get-Date).ToUniversalTime()).tostring("MMM d HH:mm:ss",$LocaleUS)
Dec 2 14:24:46

Et voilà, c’est tout bête, mais c’est bien pratique dès que vos scripts … Lire la suite