Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Configuration IP d’un serveur Nano

 

Nous allons voir comment configurer l’adressage IP d’un serveur Nano lors de son premier démarrage.

Monter le vhdx de votre image Nano.

image

 

Aller dans la lettre de lecteur monté contenant votre image Nano

image

 

Positionner vous dans le répertoire I:\Windows.

Créer le répertoire Setup si celui ci n’existe pas.

image

 

Créer maintenant dans i:\Windows le répertoire Scripts

image

 

Créer dans le répertoire Scripts un fichier portant le nom setupcomplete.cmd

image

 

Lors du premier démarrage de votre image Nano, le script setupcomplete.cmd sera exécuté.

Ainsi, vous pouvez à partir de ce script, configurer l’interface réseau de votre serveur Nano.

Exemple :

Nous allons configurer sur notre serveur Nano l’adresse IP 192.168.1.11/24 avec comme adresse DNS le 192.168.1.10.

Pour cela, nous allons enregistrer les lignes de commandes suivante dans le setupcomplete.cmd :

PowerShell -Command « & {if ($env:computername -eq ‘NANO’){netsh interface ip set address ‘Ethernet’ static 192.168.1.11 255.255.255.0 192.168.1.254}} »
PowerShell -Command « & {if ($env:computername -eq ‘NANO’){netsh interface ipv4 add dnsserver « Ethernet » address=192.168.1.10 index=1}} »

image

Ejecter votre VHD depuis l’explorateur Windows.

Lancer votre serveur Nano.

Le script SetupComplete.cmd s’exécute (car il s’agit du premier lancement du serveur Nano depuis sa génération).

 

image

image

Authentifier vous

image

Nos paramètres IP se sont correctement configurés.

image

 

image

SQL Server – Détecter et mapper les utilisateurs orphelins

Contexte

L’une des tâches régulièrement exécutées par un DBA est de restaurer ou d’attacher des bases entres différentes instances SQL. Lors de ce type d’opération, il est fréquent de rencontrer des erreurs d’authentification du type :

  • Error 15023 : User already exists in the current database,
  • Error 4064 : Cannot open user default database. Login failed,
  • The database <VOTREBASE> is not accessible. (Object Explorer). A la vue de ces erreurs, un DBA peux être tenté de retirer manuellement les utilisateurs des différentes bases de données pour les ajouter, cette action – bien que fastidieuse – résoudrais le problème décrit, il existe néanmoins des solutions intégrées à SQL pour détecter et mapper les utilisateurs orphelins (orphaned users).
     

    Explication du problème

    Les utilisateurs orphelins apparaissent lorsque le SID d’un utilisateur d’une base de donnée ne correspond pas au SID du même utilisateur qui est renseigné dans la base master.

    Le SID d’un utilisateur apparait donc à deux niveaux :

  • Au niveau instance : dans les vues système ‘”sys.server_principals” et “sys.syslogins” présentes dans la table Master,
  • Au niveau base de donnée : dans la table système sysusers.

Le SID d’un utilisateur (identifiant unique) sert à mapper un utilisateur d’une base de donnée au login renseigné dans l’instance SQL, donc lors de la restauration d’une base de donnée vers une instance SQL différente, il faut penser à re-mapper les utilisateurs orphelins.

Résolution

Afin de re-mapper les utilisateurs orphelins sans avoir à passer sur chaque utilisateur manuellement, on peux s’aider de sp_change_users, cette commande prends trois paramètres différents :

  • Report pour détecter les utilisateurs orphelins :

USE <YOURDATABASE>
GO
sp_change_users_login @Action=’Report’
GO

  • Update_one pour mapper manuellement un utilisateur de la base à un login de l’instance :
    USE <YOURDATABASE>
    GO
    sp_change_users_login @Action=’update_one’
    @UserNamePattern=’User1′
    @LoginName=’User1′
    GO
  • Auto_fix pour mapper automatiquement un utilisateur de la base à un login de l’instance et pour créer le login si absent de l’instance :
    USE <YOURDATABASE>
    GO
    sp_change_users_login @Action=’auto_fix’ , ‘User1’, null, ‘Password’
    GO

Récupération de l’ensemble des Processus en PowerShell avec leurs ID et propriétaire

 

Ce petit script va vous permettre de récupérer dans une variable un tableau de l’ensemble des process tournant sur le poste avec leurs ID et leurs propriétaire

$process=gwmi win32_process
$array=@()
foreach ($p in $Process)
{
    $temp=new-object psobject
    $temp |add-member -MemberType NoteProperty -name "ProcessName" -Value $p.name
    $temp |add-member -MemberType NoteProperty -name "ProcessID" -Value $p.ProcessID
    $temp |add-member -MemberType NoteProperty -name "User" -Value $p.getowner().user
    $array+=$temp
}

Exemple :

image

Ainsi, pour killer des processus, vous pouvez maintenant ajouter la contrainte par identification du propriétaire du Processus.

Exemple :

Nous allons killer les process Spotify de l’utilisateur ato

 

Tout d’abord on récupère les Processus respectant cette contrainte dans notre variable:

$array |? {$_.processname -eq "Spotify.exe" -and $_.user -eq "ato"}

image

 

Et ensuite, on les Kill grâce à leurs identifiants :

$array |? {$_.processname -eq "Spotify.exe" -and $_.user -eq "ato"} |%{stop-process -Id $_.processID}

Résultat : Plus de musique Sourire  (les processus Spotify de l’utilisateur ato ont été arrêtés).