RSS

Author Archives: D4rkTiger

[HowTo][Batch] Ajouter un service Windows par le registre Windows

Vous avez besoin d’installer un service Windows mais vous souhaiter maîtriser le nom exposer ou encore déployer plusieurs fois le service mais sous des noms différents. Voici comment le faire avec génération et exécution d’un fichier de registre Windows.

Pré-requis

Il est nécessaire de télécharger le ressource KIT de Windows contenant les outils instsrv.exe et srvany.exe.

Batch

echo Windows Registry Editor Version 5.00 > Service_Inserter.reg
set service_exe="<Chemin_vers_le_service>\service.exe"
rem Add keys in Service_Inserter.reg
echo. >> Service_Inserter.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service_Name>] >> Service_Inserter.reg
echo "ImagePath"=!service_exe:\=\\! >> Service_Inserter.reg
echo. >> Service_Inserter.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service_Name>] >> Service_Inserter.reg
echo "Start"=dword:00000003 >> Service_Inserter.reg
echo. >> Service_Inserter.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service_Name>\Parameters] >> Service_Inserter.reg
echo "Application"=!service_exe:\=\\! >> Service_Inserter.reg
instsrv.exe <Service_Name> srvany.exe
C:\Windows\System32\regedit.exe /S Service_Inserter.reg

 

Posted by on 22 mai 2014 in Batch, Programmation, Tutoriel

Leave a comment

Tags: , ,

[HowTo][Batch] Supprimer tous les sites FTP sur le port 21 dans IIS avec APPCMD

Vous voulez supprimer les sites FTP sur le port 21 enregistrer dans IIS simplement.

Voici la commande APPCMD qui va vous permettre de le faire sans difficultés.

Commande APPCMD

%WINDIR%\System32\inetsrv\appcmd.exe list sites /bindings:ftp/*:21: /xml | %WINDIR%\System32\inetsrv\appcmd.exe delete sites /in

Que dire de plus …

 

Posted by on 22 mai 2014 in Batch, Programmation, Tutoriel

Leave a comment

Tags: , , ,

[HowTo][Batch] Ajouter un nouveau compte utilisateur local Windows

Voici un script qui va vous permettre de réaliser une action que beaucoup de développeurs ou administrateurs réseaux utilisent, la création d’un compte utilisateur local.

Il s’agit plus d’un pense-bête que d’un tutoriel je l’avoue 😉

Commande batch

net user __username__ __password__ /add /fullname:"__fullname__"
if %errorlevel%==0 (
echo User added
)
if %errorlevel%==2 (
echo User already exists
)

Simple mais efficace, c’est que l’on cherche tous ^^

 

Posted by on 22 mai 2014 in Batch, Programmation, Tutoriel

Leave a comment

Tags: , ,

[HowTo][C#] Authentifier un compte Windows dans une application Console

Si vous souhaitez utilisez un login/password d’un compte Windows et que vous souhaitez l’utilisez pour trouver les groupes ou vérifier qu’il est Administrateur, voici un exemple qui vous permettra de le faire simplement.

   1:  using System;
   2:  using System.Runtime.InteropServices;
   3:  using System.Security.Principal;
   4:   
   5:  namespace Automatic_Blank_Card
   6:  {
   7:      class Program
   8:      {
   9:          /// <summary>
  10:          /// Logon the <paramref name="lpszUsername"/> on the <paramref name="lpszDomain"/> according to the <paramref name="dwLogonProvider"/> and <paramref name="dwLogonType"/>
  11:          /// </summary>
  12:          /// <returns>True if the logon success, otherwise false</returns>
  13:          [DllImport("advapi32.dll", SetLastError = true)]
  14:          public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
  15:   
  16:          /// <summary>
  17:          /// Format the error message according to the <paramref name="dwMessageId"/> and <paramref name="dwLanguageId"/>
  18:          /// </summary>
  19:          /// <returns>1 if the format success, otherwise 0</returns>
  20:          [DllImport("kernel32.dll")]
  21:          public static extern int FormatMessage(int dwFlags, ref IntPtr lpSource, int dwMessageId, int dwLanguageId, ref String lpBuffer, int nSize, ref IntPtr Arguments);
  22:   
  23:          /// <summary>
  24:          /// Close the unmanaged object to free memory and GAC
  25:          /// </summary>
  26:          [DllImport("kernel32.dll", SetLastError = true)]
  27:          [return: MarshalAs(UnmanagedType.Bool)]
  28:          static extern bool CloseHandle(IntPtr hObject);
  29:   
  30:   
  31:          public static string GetErrorMessage(int errorCode)
  32:          {
  33:              const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100;
  34:              const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x200;
  35:              const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000;
  36:   
  37:              const int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
  38:              const int msgSize = 255;
  39:   
  40:              string lpMsgBuf = null;
  41:              
  42:              var lpSource = IntPtr.Zero;
  43:              var lpArguments = IntPtr.Zero;
  44:              var returnVal = FormatMessage(dwFlags, ref lpSource, errorCode, 0, ref lpMsgBuf, msgSize, ref lpArguments);
  45:   
  46:              if (returnVal == 0)
  47:                  throw new Exception("Failed to format message for error code " + errorCode + ". ");
  48:              return lpMsgBuf;
  49:   
  50:          }
  51:   
  52:          private static string GetString(bool secured)
  53:          {
  54:              var result = string.Empty;
  55:              ConsoleKeyInfo key;
  56:              do
  57:              {
  58:                  key = Console.ReadKey(true);
  59:                  if (key.Key != ConsoleKey.Backspace)
  60:                  {
  61:                      if (secured)
  62:                      {
  63:                          Console.Write("*");
  64:                      }
  65:                      else
  66:                      {
  67:                          Console.Write(key.KeyChar);
  68:                      }
  69:                      result += key.KeyChar;
  70:                  }
  71:                  else
  72:                  {
  73:                      Console.Write("b");
  74:                  }
  75:              } 
  76:              while (key.Key != ConsoleKey.Enter);
  77:   
  78:              Console.WriteLine(string.Empty);
  79:   
  80:              return result;
  81:          }
  82:   
  83:          static void Main(string[] args)
  84:          {
  85:              Authenticate();
  86:              Console.ReadLine();
  87:          }
  88:   
  89:          static void Authenticate()
  90:          {
  91:              var userName = "n";
  92:              var pwd = "n";
  93:   
  94:              try
  95:              {
  96:                  const int LOGON32_PROVIDER_DEFAULT = 0;
  97:                  const int LOGON32_PROVIDER_WINNT50 = 3;
  98:   
  99:                  const int LOGON32_LOGON_INTERACTIVE = 2;
 100:                  const int LOGON32_LOGON_NETWORK = 3;
 101:                  const int LOGON_TYPE_NEW_CREDENTIALS = 9;
 102:   
 103:                  IntPtr tokenHandle;
 104:                  bool result;
 105:                  do
 106:                  {
 107:                      var machineName = Environment.UserDomainName;
 108:   
 109:                      //For DOMAIN authentication, prefers use LOGON_TYPE_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50 recommended by MSDN
 110:                      //NOTE: userName AND pwd is useless because the authenticationType is Negotiate so will be deduced directly
 111:                      //NOTE: Use 'n' in userName and pwd instead of 'string.Empty' to validate the entry parameters
 112:                      result = LogonUser(userName, machineName, pwd, LOGON_TYPE_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, out tokenHandle);
 113:                      //For LOCAL authentication
 114:                      //Console.Write("Username : " + machineName + "/");
 115:                      //userName = GetString(false);
 116:                      //Console.Write("Password : ");
 117:                      //pwd = GetString(true);
 118:                      //result = LogonUser(userName, machineName, pwd, LOGON_TYPE_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, out tokenHandle);
 119:                      if (!result)
 120:                      {
 121:                          var ret = Marshal.GetLastWin32Error();
 122:                          Console.WriteLine(GetErrorMessage(ret));
 123:                          CloseHandle(tokenHandle);
 124:                      }
 125:                  } while (!result);
 126:   
 127:                  var newId = new WindowsIdentity(tokenHandle);
 128:                  var userperm = new WindowsPrincipal(newId);
 129:   
 130:                  Console.WriteLine(userperm.IsInRole(WindowsBuiltInRole.Administrator)
 131:                                          ? "Access Granted. User is admin"
 132:                                          : "Access Granted. User is not admin");
 133:   
 134:                  CloseHandle(tokenHandle);
 135:              }
 136:              catch (Exception ex)
 137:              {
 138:                  Console.WriteLine("Exception occurred. " + ex.Message);
 139:              }
 140:          }
 141:      }
 142:  }

Il peut bien évidemment être améliorer et je vous invites à le faire 😉

 

Posted by on 18 décembre 2013 in .Net, C#.Net, Codes, Programmation, Tutoriel

Commentaires fermés sur [HowTo][C#] Authentifier un compte Windows dans une application Console

[Powershell] Fonction Question/Réponse booléenne

Voici une fonction Powershell qui vous permet de poser une question à l’utilisateur du script afin d’obtenir une réponse booléenne à cette dernière. Cela afin de valider un choix, un statut, une action, etc …

Function Get-BoolChoice
{
    <# .SYNOPSIS        
              Function to get the boolean choice of the user about a question            
          .DESCRIPTION
              This function ask the question to the user and wait the choice of the user between 'y' ($true) and 'n' ($false). 
              When the user choices a right option, the function returns the boolean choice : True ($true) if it is 'y', False ($false) if it is 'n'
          .EXAMPLE 
              Get-BoolChoice("Do you want to continue [y/n] ?")
          .PARAMETER
              question The question asked to the user
              defaultValue The default value used if the user type 'Enter' without any other character (Range values are [yYnN])
          .OUTPUTS 
              System.Boolean. Get-BoolChoice return the bool equivalent of the user choice. True ($true) if the user choice 'y', otherwise False ($false) 
    #>;
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$True, HelpMessage='What is the question you want to ask ?')]
        [string]$question,
        [Parameter(Mandatory=$False, HelpMessage='What is the default value if user just hit Enter ?')]
        [ValidatePattern("[ynYN]")]
        [string]$defaultValue
    )

    begin {
    }

    process {
        $boolChoicesArr = "y","n"
        do
        {
            if(!($defaultValue -eq "")){
                $boolChoice = Read-Host -Prompt ("{0} [y/n] {1}" -f $question, " (default '{0}')" -f $defaultValue)
            } else {
                $boolChoice = Read-Host -Prompt ("{0} [y/n]" -f $question)
            }

        }
        until(($boolChoicesArr -contains $boolChoice) -or (($boolChoice -eq "") -and !($defaultValue -eq "")))

        Write-Verbose ("The bool choice : {0}" -f $boolChoice)

        return ($boolChoice -eq 'y') -or ($boolChoice -eq "" -and $defaultValue -eq 'y')
    }
}

J’espère que cela vous aidera dans vos développement de scripts Powershell

 

Posted by on 6 décembre 2013 in Codes, Powershell

Leave a comment

Tags: ,

[IIS][HowTo] Configurer le serveur d’états ASP.Net (ASP.Net State Server)

Dans IIS, il est possible pour un site web de configurer la gestion de ses sessions pour être manager par le serveur d’état ASP.Net qui par défaut écoute sur le port 42424 du serveur sur lequel il est exécuté.

Pour le configurer :

  1. Aller dans IIS, cliquer sur le site web ou l’application web qui doit utiliser le serveur d’état.
  2. Dans le panneau de droite, cliquer sur Etat de session
  3. Dans le panneau qui s’affiche, choisir Serveur d’état
  4. Dans le panneau de commande de droite, cliquer sur Appliquer pour sauvegarder les paramètres

Voilà votre site web ou application web utilise désormais le serveur d’états pour gérer ses sessions. Ainsi même lorsque le pool d’application de votre site web ou application web s’arrête, les sessions sont préservées durant leur durée de vie (~20min par défaut).

Configurer le service ASP.Net State Server

Maintenant qu’un site web ou application web utilise le serveur d’état, il faut que ce dernier soit lancé pour que tout fonctionne correctement.

Pour cela, ouvrez les services de Windows

  • Windows + R / taper services.msc
  • Panneau de configuration / Système et sécurité / Outils d’administration / Services

Dans la liste des services :

  • Chercher le service nommé ASP.Net State Server
  • Cliquer droit dessus et cliquer sur Propriétés
  • Changer le type de démarrage en Automatique
  • Cliquer sur Démarrer
  • Cliquer sur OK

Le service est désormais configuré de façon standard et sera toujours lancé sur la machine hôte.

NOTE: Dans un environnement de PRODUCTION, le serveur d’état est dans la majorité des cas découplé du serveur Web, souvent configuré en Load Balancing, et donc la configuration standard ne s’applique plus. Pensez donc à adapter les paramètres afin de répondre à la configuration de l’environnement sur lequel est déployé le site web ou l’application web. 😉

 

Posted by on 5 décembre 2013 in Tutoriel

Leave a comment

Tags: , ,

[Powershell] Créer un raccourci sur le Bureau

Voici une petite fonction en Powershell qui vous permet de créer un raccourci d’un applicatif ou autre sur votre bureau

Function CreateShortcut
{
    param (
        [Parameter(Mandatory=$True, HelpMessage='What is the name of the shorcut you want ?')]
        [Alias("sn")]
        [string]$shorcutName,
        [Parameter(Mandatory=$True, HelpMessage='What is the path of the software/command to link ?')]
        [Alias("p")]
        [string]$path        
    )
    
    begin {}
    
    process {
        $shell = New-Object -comObject WScript.Shell
        $shortcut = $shell.CreateShortcut(("$HomeDesktop{0}.lnk" -f $shorcutName))
        $shortcut.TargetPath = $path
        $shortcut.Save()
    }
}

Libre à vous d’en faire bon usage 😉

 

Posted by on 5 décembre 2013 in Codes, Powershell

Leave a comment

Tags: , ,