Skip to content

Exemple de scripts de déploiement

Le déploiement peut se découper en plusieurs étapes :

  • l'installation de l'application;
  • l'installation du plugin Outlook (optionnelle);
  • la création des comptes.

WARNING

Les variables d'environnement varient entre les versions 32 et 64 bits de Windows.

Installation de l'application :

powershell
# Nécessaire lors d'une exécution avec les droits administrateur.
cd %~dp0

# Installation de Seald sur le poste de manière silencieuse
.\Seald-Setup-2.3.0.exe /allusers /S

# Création du répertoire de configuration de Seald.
mkdir %APPDATA%\Seald\

# Ajout de la configuration essentielle suite à une installation programatique.
echo {"autoUpdate": "disable", "windowsRegistry": "READ_ONLY"} > %APPDATA%\Seald\config.json
# Nécessaire lors d'une exécution avec les droits administrateur.
cd %~dp0

# Installation de Seald sur le poste de manière silencieuse
.\Seald-Setup-2.3.0.exe /allusers /S

# Création du répertoire de configuration de Seald.
mkdir %APPDATA%\Seald\

# Ajout de la configuration essentielle suite à une installation programatique.
echo {"autoUpdate": "disable", "windowsRegistry": "READ_ONLY"} > %APPDATA%\Seald\config.json

Installation du plugin Outlook :

TIP

Il faut remplacer la variable d'environnement %CommonProgramFiles% par %CommonProgramFiles(X86)% si la version d'Outlook est en 64 bits.

powershell
# Nécessaire lors d'une exécution avec les droits administrateur.
cd %~dp0

# Ajout du certificat de signature de Seald
certutil -addstore TRUSTEDPUBLISHER "plugin-cert.cer"

# Installation des prérequis du plugin
.\vstor_redist.exe Setup /q /norestart #Installing VSTO redistributable
.\NDP472-KB4054530-x86-x64-AllOS-ENU.exe Setup /q /norestart # Installing .NET 4.7

# Installation du plugin
# %CommonProgramFiles% si Outlook 32 bits. %CommonProgramFiles(X86)% si Outlook 64 bits
"%CommonProgramFiles%\Microsoft Shared\VSTO\10.0\VSTOInstaller.exe" /s /I https://api.seald.io/outlook-v2/SealdOutlookPlugin.vsto # commande d'installation silencieuse du plugin outlook
# Nécessaire lors d'une exécution avec les droits administrateur.
cd %~dp0

# Ajout du certificat de signature de Seald
certutil -addstore TRUSTEDPUBLISHER "plugin-cert.cer"

# Installation des prérequis du plugin
.\vstor_redist.exe Setup /q /norestart #Installing VSTO redistributable
.\NDP472-KB4054530-x86-x64-AllOS-ENU.exe Setup /q /norestart # Installing .NET 4.7

# Installation du plugin
# %CommonProgramFiles% si Outlook 32 bits. %CommonProgramFiles(X86)% si Outlook 64 bits
"%CommonProgramFiles%\Microsoft Shared\VSTO\10.0\VSTOInstaller.exe" /s /I https://api.seald.io/outlook-v2/SealdOutlookPlugin.vsto # commande d'installation silencieuse du plugin outlook

Déploiement des règles du Smart Assistant

Il est possible de déployer un fichier de règles personnalisé du smart assistant à l'aide de la commande suivante :

powershell
copy new-rules.js %APPDATA%\Seald\rules.js
copy new-rules.js %APPDATA%\Seald\rules.js

TIP

Pour plus d'information sur l'écriture et le déploiement du fichier de règle, référez vous à cette page.

TIP

Pour forcer l'activation des règles, référez vous à la configuration du plugin.

Création d'un compte et lancement:

TIP

Il faut remplacer la variable d'environnement %ProgramFiles% par %ProgramFilesX86% si la version de Windows est en 64 bits.

powershell
# Création de compte.
cd %ProgramFiles%\Seald
seald-cli create-account -d "Tim" -e tim@seald.io --email-validation 5f32fdb5-cb1d-4b1b-b981-d35f75e9376c:1b4e5537890f92cce85d86df22eergerg4 --accept-licence --force --accept-backup-keys

# Lance l'application. Le premier argument (string vide) permet à l'application de ne pas être stoppée à la fin du présent script
start "" "%ProgramFiles%\Seald\Seald.exe"
# Création de compte.
cd %ProgramFiles%\Seald
seald-cli create-account -d "Tim" -e tim@seald.io --email-validation 5f32fdb5-cb1d-4b1b-b981-d35f75e9376c:1b4e5537890f92cce85d86df22eergerg4 --accept-licence --force --accept-backup-keys

# Lance l'application. Le premier argument (string vide) permet à l'application de ne pas être stoppée à la fin du présent script
start "" "%ProgramFiles%\Seald\Seald.exe"

Exemple de script de génération de scripts de création de compte

Cet exemple de script a été écrit pour Node.js 14 LTS, et s'appuie sur le paquet csv@5.3.2 en plus de la bibliothèque standard. Des ajustements sont certainement nécessaires en fonction de l'environnement cible :

js
const csv = require('csv')
const fs = require('fs')
const { promisify } = require('util')
const crypto = require('crypto')
const path = require('path')

const csvPath = './mails.csv' // CSV with the "Display name" in the first colum, and the "Email address" in the second column, separated with ";"
const domainValidationKeyId = process.env.DOMAIN_ID
const domainValidationKey = process.env.DOMAIN_KEY
const outputDir = './out'

try {
  fs.rmdirSync(outputDir, { recursive: true })
} catch (err) {
  console.warn(err)
  console.warn('directory outputDir does not exist')
} finally {
  fs.mkdirSync(outputDir, { recursive: true })
}

const random = (size = 1000) => crypto.randomBytes(size)

const scrypt = (buff, salt) => new Promise((resolve, reject) => {
  crypto.scrypt(
    buff,
    salt,
    64, // 64 bytes for a 256 bits key (there is also a signing key for HMAC)
    { N: 16384, r: 8, p: 1 },
    (err, key) => {
      if (err) reject(err)
      else resolve(key)
    }
  )
})

const generate = async (email, domainValidationKeyId, domainValidationKey) => {
  const nonce = random(32).toString('hex')
  const token = (await scrypt(
    Buffer.from(`${email}-${domainValidationKey}`, 'utf8'),
    Buffer.from(nonce, 'utf8')
  )).toString('hex')
}

const makeScript = (displayName, emailAddress) =>
  `"%LOCALAPPDATA%\\Programs\\Seald\\Seald.exe" --headless create-account -d "${displayName.replace('"', '\\"')}" -e "${emailAddress.replace('"', '\\"')}" --email-validation ${generate(emailAddress, domainValidationKeyId, domainValidationKey)} --accept-backup-keys --accept-licence --force
start "" "%LOCALAPPDATA%\\Programs\\Seald\\Seald.exe"`

const main = async () => {
  const result = await promisify(csv.parse)(fs.readFileSync(csvPath), { delimiter: ';' })
  result.shift() // remove header
  for (const [displayName, emailAddress] of result) {
    // Writes indiviual script for each user to be executed on each machine
    fs.writeFileSync(path.join(outputDir, emailAddress + '.bat'), makeScript(displayName, emailAddress).replace('\n', '\r\n'))
  }
}

main()
const csv = require('csv')
const fs = require('fs')
const { promisify } = require('util')
const crypto = require('crypto')
const path = require('path')

const csvPath = './mails.csv' // CSV with the "Display name" in the first colum, and the "Email address" in the second column, separated with ";"
const domainValidationKeyId = process.env.DOMAIN_ID
const domainValidationKey = process.env.DOMAIN_KEY
const outputDir = './out'

try {
  fs.rmdirSync(outputDir, { recursive: true })
} catch (err) {
  console.warn(err)
  console.warn('directory outputDir does not exist')
} finally {
  fs.mkdirSync(outputDir, { recursive: true })
}

const random = (size = 1000) => crypto.randomBytes(size)

const scrypt = (buff, salt) => new Promise((resolve, reject) => {
  crypto.scrypt(
    buff,
    salt,
    64, // 64 bytes for a 256 bits key (there is also a signing key for HMAC)
    { N: 16384, r: 8, p: 1 },
    (err, key) => {
      if (err) reject(err)
      else resolve(key)
    }
  )
})

const generate = async (email, domainValidationKeyId, domainValidationKey) => {
  const nonce = random(32).toString('hex')
  const token = (await scrypt(
    Buffer.from(`${email}-${domainValidationKey}`, 'utf8'),
    Buffer.from(nonce, 'utf8')
  )).toString('hex')
}

const makeScript = (displayName, emailAddress) =>
  `"%LOCALAPPDATA%\\Programs\\Seald\\Seald.exe" --headless create-account -d "${displayName.replace('"', '\\"')}" -e "${emailAddress.replace('"', '\\"')}" --email-validation ${generate(emailAddress, domainValidationKeyId, domainValidationKey)} --accept-backup-keys --accept-licence --force
start "" "%LOCALAPPDATA%\\Programs\\Seald\\Seald.exe"`

const main = async () => {
  const result = await promisify(csv.parse)(fs.readFileSync(csvPath), { delimiter: ';' })
  result.shift() // remove header
  for (const [displayName, emailAddress] of result) {
    // Writes indiviual script for each user to be executed on each machine
    fs.writeFileSync(path.join(outputDir, emailAddress + '.bat'), makeScript(displayName, emailAddress).replace('\n', '\r\n'))
  }
}

main()