none
GPO Shutdown RRS feed

  • Question

  • Bonjour

    Je reprend la gestion d'un parc informatique et découvre Windows sevrer 2012.

    Après une mise à jours de nos switch par un prestataire extérieur, la création d'UO par zone et l'installation du gestionnaire d'impression, je m'attaque et butte sur la GPO :

    Mon prédécesseur avait mis en place une tache planifié sur le serveur qui appelle un fichier .bat par salle contenant des commandes du type :  shutdown /s /f /m:B01-PC01

    Un .bat par salle et une ligne pour chaque PC de la salle dans le fichier .bat. 

    Cette procédure fonctionne.

    Ayant créé des UO, je souhaite passer à une GPO qui réalise la même tache sans avoir à maintenir en état les fichiers .bat.

    J'ai donc créé une GPO avec les même paramètres et en supprimant /m:.....

    Problème cela ne fonctionne pas uniformément : dans la même salle des pc ayant la même configuration sur Win7 s'éteigne et d'autres ne s’éteigne pas.

    Après une semaine de recherche infructueuse sur internet, je me tourne vers vous.

    Merci d'avance pour vos lumières.

    vendredi 22 mai 2020 14:22

Réponses

  • Bonjour Trop Curieux,

    Ayant créé des UO, je souhaite passer à une GPO qui réalise la même tache sans avoir à maintenir en état les fichiers .bat.

    ==> Pas la bonne méthode, je pense. En effet, avec une GPO tu ne peux pas maîtriser l'heure d'application de celle-ci. Une GPO s'applique toutes les 90 min plus ou moins 30 min.

    En revanche une tâche planifiée, sur un serveur de préférence, là tu maîtrises l'heure d'éxécution.

    Et pourquoi ne plus utiliser cette vieille commande shutdown ? Parce que ... dès fois ça passe, et des fois ça ne passe pas comme ça devrait ... et ça c'est génant. Oublies ces vieux .bat legacy, ça marche encore bien entendu, mais oublies, et passe à Powershell.

    Il y a une simple cmdlet nommée Stop-Computer qui fait le boulot.

    # Recherche des machines dans une OU donnée, ça devient du dynamique
    $Machines = Get-ADComputer -SearchBase <FQDN de mon OU> | Select-Object -Property Name
    # lancement de l'arrêt des machines dans l'OU
    foreach ($Computer in $Machines)
        {
        Stop-Computer -ComputerName $Computer.Name -Force
        }

    Tu as ton script .ps1, plus qu'à le planifier ... avec un compte qui:

    • dispose des droits nécessaires pour lancer une tâche ("Local System" a bien ce droit, mais n'a aucun droit sur les postes distants, il faut donc utiliser un compte de domaine ayant les droits d'administration appropriés sur ton serveur)
    • dispose des droits nécessaire d'administration sur les postes distants (le même compte domaine donc).

    @matteu31400

    Il parle d'arrêt de postes de travail, et pas de redémarrage des serveurs. Tu n'as pas chaussé tes lunettes ce jour ou tu es fatigué.

    Il est tout à fait possible de créer par GPO une tache planifiée qui fera un redémarrage du poste à une heure donnée.

    ==> Oui c'est possible, mais à quoi bon "distribuer via GPO", maintenir et superviser des centaines de tâches planifiées sur les machines distantes alors qu'une seule centralisée peut faire la même chose ?Plus facile à mettre en oeuvre, plus facile à maintenir, plus facile à superviser.

    Nota : pour le redémarrage à une heure donnée, un script fait l'affaire, mais pour démarrer (cold boot), c'est no-way comme ceci. Il faut passer par une commande W.O.L. (Wake-On-Lan) qui peut être dans un script (.bat, .ps1), mais aussi s'assurer au préalable que les éléments réseaux ont bien été configurés correctement pour laisser passer les packets W.O.L.

    cordialement

    Olivier

    • Marqué comme réponse Trop Curieux mercredi 3 juin 2020 13:58
    lundi 25 mai 2020 08:38
  • Bonjour,


    Vous pouvez remplacer

    $ListeOU = Get-ADOrganizationalUnit -Filter * -SearchBase 'ou=Parc Informatique, ou=Gestion, dc=DomaineIT, dc=local' | Select-Object -Property Name

    par

    $ListeOU = (Get-ADOrganizationalUnit -Filter * -SearchBase 'ou=Parc Informatique, ou=Gestion, dc=DomaineIT, dc=local' ).name


    ou alors

    foreach ($OU in $ListeOU)

    par

    foreach ($OU in $ListeOU.name)

    ou encore

    $Machines = Get-ADComputer -Filter * -SearchBase "ou=$ou,dc=audit, dc=lan"

    par

    $Machines = Get-ADComputer -Filter * -SearchBase "ou=$($ou.name),dc=audit, dc=lan"

    Cela vous laisse l’embarras du choix :)


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    mardi 2 juin 2020 20:47

Toutes les réponses

  • Salut,

    que veux faire ta GPO ? éteindre les serveurs o les postes clients ?

    J'ai donc créé une GPO avec les même paramètres et en supprimant 

    si j'ai bien compris t'as crée un scripte qui s'ouvre avec une GPO ?et ton objectif final.

    samedi 23 mai 2020 03:29
  • Bonjour,

    l'option /M:\\machine indiquant la machine sur laquelle déclencher l'arrêt était peut être importante.

    Comment fais-tu pour appliquer ta GPO à une heure donnée? Là, j'ai un gros doute.

    => Cette notion d'"horaire" n'existe pas dans les GPOs.

    A bientôt,


    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    samedi 23 mai 2020 09:57
  • Bonjour,

    Il est tout à fait possible de créer par GPO une tache planifiée qui fera un redémarrage du poste à une heure donnée.

    Toutefois, je m'interroge sur l'utilité de faire redémarrer les serveurs.... Ils sont sensé redémarrer 1 fois par mois lors des mises à jours, ce qui devrait être suffisant :)


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    samedi 23 mai 2020 10:26
  • il manque quelque détails dans sa présentation, car la il dit qu'il souhaite éteindre et non redémarrer, la commande /s éteint, en plus il parle des clients win7 ? je pense qu'il veut éteindre les postes dans une salle quand c'est la nuit, et les gens s'en vont sans les éteindre, cela arrive dans les écoles etc....

    si c'est le cas tu peux créer une GPO qui éteint les postes à une heure précise.

    Problème cela ne fonctionne pas uniformément : dans la même salle des pc ayant la même configuration sur Win7 s'éteigne et d'autres ne s’éteigne pas.

    samedi 23 mai 2020 15:14
  • Bonjour Trop Curieux,

    Ayant créé des UO, je souhaite passer à une GPO qui réalise la même tache sans avoir à maintenir en état les fichiers .bat.

    ==> Pas la bonne méthode, je pense. En effet, avec une GPO tu ne peux pas maîtriser l'heure d'application de celle-ci. Une GPO s'applique toutes les 90 min plus ou moins 30 min.

    En revanche une tâche planifiée, sur un serveur de préférence, là tu maîtrises l'heure d'éxécution.

    Et pourquoi ne plus utiliser cette vieille commande shutdown ? Parce que ... dès fois ça passe, et des fois ça ne passe pas comme ça devrait ... et ça c'est génant. Oublies ces vieux .bat legacy, ça marche encore bien entendu, mais oublies, et passe à Powershell.

    Il y a une simple cmdlet nommée Stop-Computer qui fait le boulot.

    # Recherche des machines dans une OU donnée, ça devient du dynamique
    $Machines = Get-ADComputer -SearchBase <FQDN de mon OU> | Select-Object -Property Name
    # lancement de l'arrêt des machines dans l'OU
    foreach ($Computer in $Machines)
        {
        Stop-Computer -ComputerName $Computer.Name -Force
        }

    Tu as ton script .ps1, plus qu'à le planifier ... avec un compte qui:

    • dispose des droits nécessaires pour lancer une tâche ("Local System" a bien ce droit, mais n'a aucun droit sur les postes distants, il faut donc utiliser un compte de domaine ayant les droits d'administration appropriés sur ton serveur)
    • dispose des droits nécessaire d'administration sur les postes distants (le même compte domaine donc).

    @matteu31400

    Il parle d'arrêt de postes de travail, et pas de redémarrage des serveurs. Tu n'as pas chaussé tes lunettes ce jour ou tu es fatigué.

    Il est tout à fait possible de créer par GPO une tache planifiée qui fera un redémarrage du poste à une heure donnée.

    ==> Oui c'est possible, mais à quoi bon "distribuer via GPO", maintenir et superviser des centaines de tâches planifiées sur les machines distantes alors qu'une seule centralisée peut faire la même chose ?Plus facile à mettre en oeuvre, plus facile à maintenir, plus facile à superviser.

    Nota : pour le redémarrage à une heure donnée, un script fait l'affaire, mais pour démarrer (cold boot), c'est no-way comme ceci. Il faut passer par une commande W.O.L. (Wake-On-Lan) qui peut être dans un script (.bat, .ps1), mais aussi s'assurer au préalable que les éléments réseaux ont bien été configurés correctement pour laisser passer les packets W.O.L.

    cordialement

    Olivier

    • Marqué comme réponse Trop Curieux mercredi 3 juin 2020 13:58
    lundi 25 mai 2020 08:38
  • Bonjour

    Avant tout merci pour vos contributions.

    Quel plaisir de savoir que même si l'on maitrise mal un système on peut continuer à progresser grâce aux échanges.

    Je vais donc me plonger dans les scripts powershell et tester prochainement cette solution.

    Cordialement

    lundi 25 mai 2020 15:40
  • Bah tant mieux, tiens nous au courant,

    Bonne chance, y a aussi une autre solution mais on l'a pas proposé c'est d'acheté une longue rallonge jusqu'au domicile, et tu éteins quand tu veux au moins la tes sûr que les postes vont bien s'éteindre hhhh

    lundi 25 mai 2020 16:53
  • Je suppose que la rallonge est de l'humour de Geek ou d'administrateur réseau. D'ailleurs est ce le même humour ???

    Je pense avoir compris le script et le testerai demain.

    Le script va éteindre tous les PC présent dans le chemin défini dans <FQDN de mon OU>.

    Si je souhaite que les OU se nommant NPE (Ne Pas Eteindre) ne soit pas pris en compte, quelle méthode me conseillez vous ?

    cdt

    lundi 25 mai 2020 18:51
  • C'est le meme humour, 

    Sinon pourquoi nommé une ou npe ? C'est déconseillée tu peux éviter cela en ajoutant une condition "-ne" au filtre, mais comme tu vas ciblé que sur l'ou que tu vas rentrer, t'as pas besoin de filtrer.

    lundi 25 mai 2020 21:56
  • Bonjour

    Après plusieurs tests fructueux sur la fonction ADComputer, je butte sur 1 message d'erreur sur la fonction suivante : Stop-Computer -ComputerName B01-P02.Name -Force

    Le poste existe bien et reconnu par ADComputer. Il est en fonction.

    Message d'erreur : Stop-Computer : Le serveur RPC n'est pas disponible. (Exception de HRESULT : 0x800706BA)

    Après plusieurs recherches sur internet et modifications de services W7 et redémarrage... rien de nouveau.

    Avez vous une piste à me proposer ?

    Cdt

    mardi 26 mai 2020 13:45
  • Salut,

    Le poste n'existe pas dans ad.

    Eneleves le .name, si tu mets le nom du poste genre b01-p02 t'as pas besoin de mettre .nop

    .nom correspond à la variable $computer

    Soit tu mets $computer.name soit le nom du poste mais tu ne dois pas combiner les deux.

    mardi 26 mai 2020 14:00
  • En effet cela fonctionne mieux.... j'adore regarder un ordinateur s’éteindre.... comme d'autres une machine a laver le linge tourner.... chacun son plaisir

    Merci

    Je continue ma découverte

    mardi 26 mai 2020 14:36
  • ce que l'on fait chez bous et qui a regle pas mal de probleme est d'envoyer par GPO un task scheduler sur tous les PC.
    mercredi 27 mai 2020 11:08
  • Bonjour

    Je souhaite faire évoluer la fonction mais je bute sur la syntaxe de ou=$OU dans le deuxième searchbase :

    $ListeOU = Get-ADOrganizationalUnit -Filter * -SearchBase 'ou=Parc Informatique, ou=Gestion, dc=DomaineIT, dc=local' | Select-Object -Property Name
    foreach ($OU in $ListeOU)
        {
        Write-Output  $OU
        $Machines = Get-ADComputer -Filter * -SearchBase "ou=$ou, ou=Parc Informatique, ou=Gestion, dc=DomaineIT, dc=local" | Select-Object -Property Name
        # lancement de l'arrêt des machines dans l'OU
        foreach ($Computer in $Machines)
            {
            Write-Output $Computer
            #Stop-Computer -ComputerName $Computer.Name -Force
            }
        }

    Le message d'erreur envoyé est :

    Get-ADComputer : La syntaxe du nom de l’objet est incorrecte
    Au caractère Ligne:8 : 17
    +     $Machines = Get-ADComputer -Filter * -SearchBase "ou=$ou, ou=Parc Informatiq ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Get-ADComputer], ADException
        + FullyQualifiedErrorId : ActiveDirectoryServer:8335,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

    Pouvez vous m'aider SVP.

    Cdt


    Trop Curieux

    mardi 2 juin 2020 15:07
  • Bonjour,


    Vous pouvez remplacer

    $ListeOU = Get-ADOrganizationalUnit -Filter * -SearchBase 'ou=Parc Informatique, ou=Gestion, dc=DomaineIT, dc=local' | Select-Object -Property Name

    par

    $ListeOU = (Get-ADOrganizationalUnit -Filter * -SearchBase 'ou=Parc Informatique, ou=Gestion, dc=DomaineIT, dc=local' ).name


    ou alors

    foreach ($OU in $ListeOU)

    par

    foreach ($OU in $ListeOU.name)

    ou encore

    $Machines = Get-ADComputer -Filter * -SearchBase "ou=$ou,dc=audit, dc=lan"

    par

    $Machines = Get-ADComputer -Filter * -SearchBase "ou=$($ou.name),dc=audit, dc=lan"

    Cela vous laisse l’embarras du choix :)


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    mardi 2 juin 2020 20:47
  • Bonjour

    étant un peu fainéant je choisis la 3éme solution qui fonctionne très bien

    Merci beaucoup 


    Trop Curieux

    • Marqué comme réponse Trop Curieux mercredi 3 juin 2020 14:01
    • Non marqué comme réponse Trop Curieux mercredi 3 juin 2020 14:01
    mercredi 3 juin 2020 13:58
  • Bonjour

    Grace à votre aide j'ai pu découvrir le langage PowerShell, je souhaite donc partager ma réalisation qui correspond exactement à mes besoins :

    Write-Output "Date de début : $(Get-Date)"
    
    $ListeOU = Get-ADOrganizationalUnit -Filter * -SearchBase 'ou=Parc Informatique, ou=Gestion, dc=audit, dc=local' -SearchScope OneLevel | Select-Object -Property Name | Sort-Object -Property Name
    
    foreach ($OU in $ListeOU)
        {
        Write-Output  "Salle : $($OU.name)"
        
        # lancement de l'arrêt des machines dans l'OU
        
        if($ou.Name -eq "NePasEteindre"){
            Write-Output "Non traité : $($OU.Name)"
        }
        else{
       
        $Machines = Get-ADComputer -Filter * -SearchBase "ou=$($ou.name), ou=Parc Informatique, ou=Gestion, dc=audit, dc=local" -SearchScope OneLevel | Select-Object -Property Name | Sort-Object -Property Name
       
        foreach ($Computer in $Machines)
            {
            Write-Output "        $($Computer.name)"
            #Stop-Computer -ComputerName $Computer.Name -Force
            }
        }
        }
    Write-Output "Date de fin : $(Get-Date)"
    Merci à tous


    Trop Curieux

    mercredi 3 juin 2020 14:43
  • Bonjour

    Suite des opérations, maintenant beaucoup plus de PC sont mis en service quotidiennement, je me suis aperçu que le script ci-dessus présente une faille.

    Le Script renvoi un message d'erreur "Le serveur RPC n'est pas disponible" dans 2 cas :

    - le PC est éteint => pas de problème

    - le PC est en veille simple ou prolongée :

    Après des recherches j'ai constaté que les cartes réseau sont configurés sur la fonction réveil avec la notion de paquet magique pouvant donc être réveillé par l'envoi d'une commande avec l'adresse MAC.

    N'ayant pas les adresses MAC dans l'AD, il semblerait donc nécessaire de les collecter pour pouvoir réveiller les PC et leur demander de s'éteindre => opération qui me semble complexe avec notamment Getmac.....

    Je vois donc 2 solutions :

    - simple : je désactive la notion de paquet magique et une simple commande d'appel du PC réveille le PC,

    - soit je collecte l'adresse MAC : galère en perspective...

    Voyez vous d'autres solutions, à part couper le courant des prises informatique ?


    Trop Curieux

    mercredi 17 juin 2020 13:12
  • Bonjour,

    Hé oui, un script n'est pas seulement un alignement de cmdlets les unes derrières les autres, ça serait trop facile. Tu viens de mettre le doigt sur le plus délicat ... la gestion des erreurs.

    Ci-dessous les réflexions que je me fais sur ta préoccupation. Il y a peut-être d'autres pistes à exploiter.

    Tu écris [...le PC est éteint => pas de problème...]. Non. Ca génère une erreur dans le Stop-Computer. Il faut gérer cela. Tu ne dois exécuter Stop-Computer que si la machine est Online. Un petit if (Test-Connexion $Computer) {stop-Computer $Computer} et tu règles cette question. 

    Reste la question du [....le PC est en veille simple ou prolongée...] à traiter.

    Comment aborder cet aspect ?Envisager de configurer les postes (par GPO) pour qu'ils ne se mettent pas en veille ou alors seulement extinction de l'écran (pas la carte réseau et pas le disque) et encore moins la veille prolongée ? Pourquoi pas ! Dans ce cas, ça pourrait régler ton soucis.Simple à mettre en oeuvre. Penser à ne pas autoriser l'utilisateur à changer cette conf. cependant.

    Relever les MacAddress ? Possible, mais il faudrait collecter NomMachine, MacAddress et mettre ça dans un .csv que ton script pourrait utiliser. Fichier qu'il te faudrait mettre à jour régulièrement en fonction de l'évolution de ton parc. De plus, il faudrait que les cartes réseaux acceptent les magicPackets et ce n'est pas le cas de toutes les cartes, ... et que les cartes aient été configurées pour ça (encore un truc à param). Enfin, si tu as plusieurs VLAN, il faut que les équipements réseaux aient été configurés pour laisser passer les magipackets du W.O.L. (ça ne passe pas les switchs et les routeurs par d&faut car c'est du broadcast). Encore un truc supplémentaire à prévoir. Galères en perspective.

    Perso, je vois bien vers quelle solution je m'orienterais, mais fais ton choix. :-)

    Bon courage, tu tiens le bon bout.

    cordialement

    Olivier


    jeudi 18 juin 2020 08:35