none
modifier une partie du nom machine en powershell RRS feed

  • Question

  • bonjour,

    après quelques recherche sur le net je ne parviens pas à trouver mon bonheur.

    Novice en PS j'aurais besoin d'aide.

    Je souhaite renommer en masse les machines (win7) de mon domaine (2008R2) de la façon suivante:

    si le nom de la machine commence par "UC", remplacer "UC" par "WS", puis redémarrer la machine évidemment.

    A votre bon cœur !

    Merci !

    mercredi 26 novembre 2014 13:30

Toutes les réponses

  • Bonjour,

    Voici un rapide bout de PowerShell qui utilise "Rename-Computer"

    $ComputeName = Import-Csv .\Name.csv
    
    Foreach ($i in $ComputeName){
    
    if ( $i.name.StartsWith("UC")){
        
        $NewName = $i.name.Replace("UC","WS")
    
        Rename-Computer -ComputerName $i -NewName $NewName  -DomainCredential Domain01\Admin01 -force -Restart
    
    Write-Host "INFO : L'ordinateur $i va redemarrer et s'apeller $NewName"
    }
    else{Write-Host "INFO : L'ordinateur $i n'a pas besoin de changer de nom"
    }
    
    }

    Et mon CSV est de cette forme:

    NAME
    UCTEST
    UITEST
    TOTO
    UCIIII
    UCKKK

    Lien TechNet pour la commande Rename-Computer: http://technet.microsoft.com/fr-fr/library/hh849792%28v=wps.620%29.aspx

    N'hésite pas à nous faire un retour

    Cordialement

    • Proposé comme réponse F.ABASSI jeudi 27 novembre 2014 09:42
    • Non proposé comme réponse mister..t jeudi 27 novembre 2014 16:25
    jeudi 27 novembre 2014 09:33
  • Salut,

    la réponse proposée considère que la convention de nommage ne permet pas ce nom "UC01UC".
    Comme on ne connait pas cette convention, une autre solution est d'utiliser une expression régulière :

    #$VerbosePreference='continue'
    $ComputerName = @('UC01','UC01BUCompta','01LUC','01UC','ucu01')
    Foreach ($Name in $ComputerName)
    {
        if ( $Name -match ('^UC'))
        {
          $NewName = $Name -Replace '^UC','WS'
          "Rename-Computer -ComputerName $Name -NewName $NewName  -DomainCredential Domain01\Admin01 -force -Restart"
          Write-Host "INFO : L'ordinateur $Name redémarre et s'appellera $NewName"
        }
        else
        { Write-Verbose "INFO : L'ordinateur $Name n'a pas besoin de changer de nom" }
    }

    En passant, je précise que l'appel à la méthode StartsWith du code précédent est dans ce cas sensible à la casse.


    Beatus, qui prodest, quibus potest.

    • Proposé comme réponse Mickaël LOPES mardi 2 décembre 2014 09:55
    • Non proposé comme réponse mister..t mercredi 10 décembre 2014 08:08
    jeudi 27 novembre 2014 14:19
    Modérateur
  • Bonsoir,

    merci pour votre aide.

    J'ai oublié de préciser que je ne souhaite pas utiliser de csv, la réponse de Laurent m’intéresse donc plus.

    De plus, aucun nom machine ne contient les lettres UC ailleurs qu'au début du nom.

    Néanmoins cette solution devrait fonctionner, je testerais ça dés que possible en essayant d'épurer les commandes.

    Cordialement.

    jeudi 27 novembre 2014 16:29
  • Bonjour,

    Vous pouvez aussi proceder de cette façone si vous voulez faire ceci sur un domaine:

    $computers = Get-adcomputer | where {$_.name –match "^[UA]"}
     
     Foreach($Name in $computers)
     
    {
     
    $NewName = $Name -Replace 'UC','WS'
     
    Rename-computer –computername $computer –newname $NewName –domaincredential domain\user –force –restart
     
            }

    Une petite précision quand même la commande Rename-Computer n'est disponible qu'à partir de PS 3.


    A+

    L’information n’a de valeur que si elle est partagée!! AK





    jeudi 27 novembre 2014 18:11
  • Bonjour,

    merci pour votre contribution, qui me parait bien sauf que:

    à la 1ere ligne: "^[UA]" est voulu ? ce n'est pas plutôt "^[UC]" ?

    quelle serait son équivalent pour PS1 ?

    Merci

    mercredi 10 décembre 2014 08:08
  • Bonjour,

    Vous parlez de cette ligne?

    $computers = Get-adcomputer | where {$_.name match "^[UA]"}

    Effectivement, ce qui est demandé là est :
    Parcours les computers de l'AD qui contiennent la chaîne de caractères UA, puis renseigne le contenu dans la variables $computers. Parcours le contenu de la variable et remplace ... UC par WS. Il y a donc une petite coquille.
    Le nom de l'ordinateur à renommer n'est pas non plus spécifié puisque la commande :
    Rename-computer –computername $computer ne spécifie pas d'ordinateur à renommer (la variable $computer sans S n'a pas été définie dans le script).
    Il faut donc retravailler le script et l'adapter avant de pouvoir l'utiliser.
    Et surtout, le tester avant de lancer sur plusieurs machines.


    mercredi 10 décembre 2014 08:48
  • Bonjour, Evidemment c'est "^[UC]" dans votre cas , enfin c'est une expression régulière qui mentionne que le nom recherché doit commencer par UC, dans votre cas, UA donc c'était un exemple. A+

    L’information n’a de valeur que si elle est partagée!! AK

    mercredi 10 décembre 2014 09:00