none
Créer un script pour les clients SCCM 2012 RRS feed

  • Discussion générale

  • Bonjour,

    Je souhaite faire un script (pour les postes client) permettant d'installer à distance le client SCCM 2012 à partir d'un fichier texte contenant pas plus de 20 ordinateurs. L'ordre des étapes sont les suivantes :

    1. Vérifier que la couche WMI soit fonctionnelle sur le poste
    2. Vérifier si le client SCCM 2012 R2 est déjà installé (en fonction de la version je pense)
    3. Installer le client 2012 depuis un share sur les postes en spécifiant le code site et le MP
    4. Vérifier que les services en question soient bien démarrés
    5. Exécuter le script depuis le compte administrateur local de la machine
    6. Générer un fichier LOG horodaté (afin de ne pas supprimer les anciens LOG) avec la liste des postes et leur statut
      - poste inaccessible
      - installation du client OK
      - client déjà installé
      - couche WMI OK ou Erreur

    Toute aide est la bienvenue parce que je galère un peu ...

    Merci.

    mardi 1 juillet 2014 12:34

Toutes les réponses

  • Salut,

    comme contribution, voici un script de gestion de prérequis (Powershell version 2.0).

    Pour les logs, il s'agit de savoir si tu cherches juste à récupérer un code retour ou qq chose de plus élaboré.

    Au cas où, voici une fonction pour l'horodatage de nom de fichier:

    function New-FileNameTimeStamped{
     param($FileName,$Date=(Get-Date),$Format='dd-MM-yyyy-HH-mm-ss')
    
      $SF=New-object System.IO.FileInfo $FileName 
      "{0}\{1}-{2:$Format}{3}" -F $SF.Directory,$SF.BaseName,$Date,$SF.Extension
    }#New-FileNameTimeStamped


    Beatus, qui prodest, quibus potest.

    mercredi 2 juillet 2014 13:41
    Modérateur
  • Salut,

    Merci pour l'info. 

    2 questions que je me pose:

    1. Comment indiquer au fichier de LOG qu'il doit contenir les résultats des tests spécifiés dans l'étape 6 ?

    2. Dans le code que tu m'as indiqué pour la date, comment spécifier le chemin d'enregistrement du fichier de LOG stp ?

    Merci pour ton aide.

    jeudi 3 juillet 2014 08:48
  • >>2. Dans le code que tu m'as indiqué pour la date, comment spécifier le chemin d'enregistrement du fichier de LOG stp ?
    Pour les valeurs par défaut, comme ceci :
    $NewFileName= New-FileNameTimeStamped 'C:\Temp\Test.log'
    >>1. Comment indiquer au fichier de LOG qu'il doit contenir les résultats des tests spécifiés dans l'étape 6 ?
    Je ne sais pas quelle solution tu comptes utiliser. Avec celle proposée et une fois celle-ci configurée :

    $Logger.PSInfo("WMI OK")

    #ou $Logger.PSError("WMI NOK")

    $Logger.PSInfo("Client déjà installé.")...

    Mais après réflexion, tu peux utiliser une approche plus simple basé sur Set-Content par exemple qui ne nécessite pas de déploiement de prérequis.

    Beatus, qui prodest, quibus potest.

    jeudi 3 juillet 2014 09:47
    Modérateur
  • Salut,

    Voilà ce que j'ai fait :

    $Postes = Get-Content .\Postes.txt

    $ParametresWMI = @{
                       Namespace = 'root\cimv2'
                       ComputerName = $Postes
                       ErrorAction = 'Stop'
                      }

    $ResultatWMI = Get-WmiObject @ParametresWMI -List

    If ($ResultatWMI.StatusCode -Eq $null)
      {Write-Host "La couche WMI est OK"}
    Else {Write-Host "La couche WMI est KO"
         Exit
         }


    $LOGDate = Get-Date -UFormat %d-%m-%Y
    $LOGTime = Get-Date -UFormat %H:%M:%S
    $Date = $LOGDate + " - " + $LOGTime
    $LOG = $ResultatWMI

    # Ajout de la ligne dans un fichier en utilisant la redirection
    $FichierLOG = "C:\TEMP\Resultat-" + $Date + ".log"
    Write-Host $LOG >> $FichierLOG

    Quand je lance ce script, je reçois un message d'erreur disant que :

    "Le format du chemin d'accès donné n'est pas pris en charge". Y a t-il une erreur stp ?

    Merci

    lundi 7 juillet 2014 10:12
  • Salut,

    Voilà ce que j'ai fait :

    $Postes = Get-Content .\Postes.txt

    $ParametresWMI = @{
                       Namespace = 'root\cimv2'
                       ComputerName = $Postes
                       ErrorAction = 'Stop'
                      }

    $ResultatWMI = Get-WmiObject @ParametresWMI -List

    If ($ResultatWMI.StatusCode -Eq $null)
      {Write-Host "La couche WMI est OK"}
    Else {Write-Host "La couche WMI est KO"
         Exit
         }


    $LOGDate = Get-Date -UFormat %d\%m\%Y
    $LOGTime = Get-Date -UFormat %H-%M-%S
    $Date = $LOGDate + " - " + $LOGTime
    $LOG = $ResultatWMI

    # Ajout de la ligne dans un fichier en utilisant la redirection
    $FichierLOG = "C:\TEMP\Resultat - " + $Date + ".log"
    Write-Host $LOG >> $FichierLOG

    Quand je lance ce script, je reçois un message d'erreur disant que :

    "Impossible de trouver une partie du chemin d'accès 'C:\TEMP\Resultat - 07\07\2014 - 12-21-00.log'". Y a t-il une erreur stp ?

    Merci
    lundi 7 juillet 2014 10:24
  • ici, tu ne peux utiliser le caractère '\' dans ton format de date '%d\%m\%Y'.

    Ni ceux renvoyés par cette fonction :

    [System.IO.Path]::GetInvalidFileNameChars()


    Beatus, qui prodest, quibus potest.

    lundi 7 juillet 2014 10:33
    Modérateur
  • OK Merci c'est modifié.

    Tout fonctionne maintenant à part le fait que le résultat de mon test WMI s'affiche à l'écran et non dans mon fichier LOG. Je souhaite juste que le fichier LOG affiche à l'intérieur WMI OK ou KO mais il est vide ...

    As-tu une idée stp ?

    Merci.
    lundi 7 juillet 2014 10:50
  • Ton script fait ce que tu lui demandes, Write-Host cible l'écran et pas la sortie standard.

    Ceci ne fonctionnera pas :

    Write-Host $LOG >> $FichierLOG
    Tu peux utiliser le cmdlet Out-File et son paramètre -Append.

    Beatus, qui prodest, quibus potest.

    lundi 7 juillet 2014 13:21
    Modérateur
  • Salut,

    Je viens aux nouvelles. Mon script fonctionne parfaitement mis à part le fait que l'installation de mon client SCCM à distance génère une erreur.

    Dans mon fichier texte, j'ai mis la liste de mes postes.

    Si le client n'est pas installé je lance la commande suivante:

    Invoke-Item \\$_\C$\TEMP\ccmsetup.exe /mp:MP01  -> cela me dit que le chemin réseau n'existe pas alors que le client est bien copié sur les postes en local

    As-tu une idée stp ?

    Avec quelle commande dois-je lancer l'exe ?

    Merci

    vendredi 11 juillet 2014 08:45
  • Invoke-Item \\$_\C$\TEMP\ccmsetup.exe /mp:MP01  -> cela me dit que le chemin réseau n'existe pas alors que le client est bien copié sur les postes en local

    Bonjour JohnLeg

    si ton fichier ccmsetup.exe est copié en local pourquoi faire "\\$_\c$\.....", un simple "C:\...." devrait suffire non ?

    il te faut peut etre aussi regarder les autorisations d'exécution de scripts non signed par rapport au login que tu utilise sur le poste distant.

    par défaut  powershell est en restricted,
    regarde l'instruction Set-ExecutionPolicy


    • Modifié 6ratgus mardi 15 juillet 2014 10:09
    mardi 15 juillet 2014 09:52