IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Executer un script sur une machine distante [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut Executer un script sur une machine distante
    Bonjour,

    J'aimerai exécuter un script vbs sur une machine distante.
    Le problème est que je ne peux pas utiliser "invoke-command" car bloqué par une politique de sécurité.

    Si quelqu'un a une idée de comment faire je suis preneur.
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    salut moman

    le wmi peut être une piste

    un exemple de code que j'avais trouvé y a quelque années :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    function Process_cmd
        {
        Param($Target,$exec)
        	
        $random = get-random
    
        #cmd to execute remotely 
        $cmd = "cmd /c $exec > C:\$random.txt"
    
        #execute the cmd remotely 
        $processid = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $Target
    
        #wait until the process is done 
        do { $resultprocess = Get-WmiObject win32_process -ComputerName $Target | where {$_.processid -eq $processid.processid }
             sleep 1 
           } until ($resultprocess -eq $null)
    
        #copy the log file into the script folder to get the content quickly 
        if (test-path "\\$Target\C$\$random.txt") {
            #get the log content create by the cmd
            try {
                $result = Get-Content \\$Target\C$\$random.txt -encoding ascii
                }
            catch {}
    
            #remove the log 
            try {
                remove-item \\$Target\C$\$random.txt -ErrorAction SilentlyContinue
                }
            catch {}
            }
        	
        return $result
        }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Merci 6ratgus.

    Je testerais ta réponse lundi.

    Sinon, j'avais essayé de faire un mappage réseau, de copier le script sur la machine distante et de l’exécuter via ce mappage.
    Pour l’exécuter j'avais utilisé le cscript de la machine distante via le mappage, mais le script semblait s’exécuter sur la machine de départ, je pense donc que ce doit être du à l'environnement d’exécution.

    Voila, voila. Si vous avez d'autres idées, je suis toujours preneur.
    Merci.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Merci 6ratgus.
    Ça fonctionne très bien ^^

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Bonjour bonjour

    Voila plusieurs jours que je cherche... Mais sans succès....

    Disons que j'ai résolu 50% du problème, mais le reste ...

    je souhaite faire deux chose, la première consiste à lancer une commande CMD sur une liste de serveur, ils sont, pour l'instant en Win2003.(je n'ai pas trouvé la solution)

    La deuxième chose consiste à lancer un vbs sur, également une liste de serveur en 2003. j'ai trouvé en utilisant Psexec.

    J'ai essayé avec la même méthode, psexec, mais sans succès, avec un runas... idem.

    je suis donc tombé sur ton script, mais j'avoue ne pas trop le comprendre... pourriez vous me l'expliquer ?

    Merci merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    voici un petit exemple d'utilisation de Process_cmd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $commande = "dir c:\" # tu remplace ce dir par la commande que tu veux exécuté
    $ordinateur = "pc-de-test"
    Process_cmd $Ordinateur $commande
    Attention certaines commandes demandent une élévation "admin", Process_cmd ne résout pas ce problème !


    pour ton problème de "lancer une commande CMD sur une liste de serveur" tu as plusieurs solutions !!! tout dépend de ta liste
    en voici une :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "serveur1", "serveur2", "serveur3" | foreach {
         Process_cmd $_ $commande
         }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Merci pour ce script. Néanmoins je ne comprend toujours pas le fonctionnement. En quel langage est-ce ? du VBscript ? Comment dois-j faire pour l’exécuter ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    En quel langage est-ce ?
    c'est du PowerShell

    Comment dois-j faire pour l’exécuter ?
    tu doit enregistrer ton script dans un fichier avec l'extension .ps1
    puis pour exécuté tu tape la commande suivante : powershell -file tonscript.ps1

    tu a ici sur ce forum/site des tutoriels pour débuté en powershell

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Encore merci

    Malheureusement : " Le terme «*Process_cmd*» n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou programme"

    Super le deuxième site

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Salut, kewin117.

    Je lance le script comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    $Process_cmd = {
        Param($Target,$exec)
        
        $random = get-random
    
        $cmd = "cmd /c $exec > C:\$random.txt"
    
        $processid = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $Target
    
        do { $resultprocess = Get-WmiObject win32_process -ComputerName $Target | where {$_.processid -eq $processid.processid }
             sleep 1 
           } until ($resultprocess -eq $null)
    
        if (test-path "\\$Target\C$\$random.txt") {
            try {
                $result = Get-Content \\$Target\C$\$random.txt -encoding ascii
            }
            catch {}
    
            try {
                remove-item \\$Target\C$\$random.txt -ErrorAction SilentlyContinue
            }
            catch {}
        }
        return $result
    }
    
    foreach ($User in $Users) {
        $running = @(Get-Job | Where-Object { $_.State -eq 'Running' })
        if ($running.Count -lt $nbMax) {
    		Start-Job -ScriptBlock $Process_cmd  -ArgumentList $User.Nom, "cscript C:\Install_WSUS.vbs action:install restart:$restart" -name $User.Nom
        } else {
             $running | Wait-Job
    		Start-Job -ScriptBlock $Process_cmd  -ArgumentList $User.Nom, "cscript C:\Install_WSUS.vbs action:install restart:$restart" -name $User.Nom
        }
        Get-Job | Receive-Job
    }
    Ça devrai régler ton problème (pas besoin d'utiliser les jobs), si tu n'y arrive met ce que tu as fait je t'aiderai à le lancer.

    Sinon j'ai aussi une question ^^, l’exécution de mon script C:\Install_WSUS.vbs ne donne pas le même résultat lorsque je l’exécute à distance ou en local, cela est un comportement normal ??

  11. #11
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Salut moman,

    Merci pour le code, mais je n'y comprend pas grand chose... Comment je fais pour le modifier avec mes propres paramètres?
    -Exécuter un cmd se trouvant dans le répertoire d:\......... de chaque serveur
    -Exécuter se cmd (donc présent sur chaque serveur) sur une liste de serveur présent dans un fichier *.txt



    encor merci

  12. #12
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Si par hasard, vous cherchiez une solution en Vbscript pour la liste des processus en cours d'exécution et les éléments à démarrage automatique (en locale) :
    Code vbscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    ' Les éléments à démarrage automatique + ListProcessCmdLine.vbs © Hackoo © 2011
    ' Mise à jour le 17/09/2015 : Ajout de la taille des processus
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set Ws = CreateObject("WScript.Shell")
    Set ProcessEnv = Ws.Environment("Process")
    NomMachine = ProcessEnv("COMPUTERNAME") 
    NomUtilisateur = ProcessEnv("USERNAME") 
    NomFichierLog="Liste_Processus.txt"
    temp = Ws.ExpandEnvironmentStrings("%temp%")
    PathNomFichierLog = temp & "\" & NomFichierLog
    Set OutPut = fso.OpenTextFile(temp & "\" & NomFichierLog,2)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _ 
    & strComputer & "\root\cimv2") 
    Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process")
    count=0 
    Call Infosys()
    OutPut.WriteLine "[COLOR=""Red""]" & String(14,"*")& "Liste des Processus en cours d'exécution le " & date & " à " & time & " sur Le PC "& NomMachine &" connecté en tant que " & NomUtilisateur & String(14,"*")& vbNewline & String(80,"*") & "[/COLOR]"
    For Each objProcess in colProcesses
        ProcessName = objProcess.Name
        ProcessID = objProcess.ProcessID
        CommandLine = objProcess.CommandLine    
        Process_Size = ConvertSize(objProcess.WorkingSetSize)
        count=count+1
        Texte = "Numéro PID = "& ProcessID & VbNewLine & "Nom du Processus = " & ProcessName & VbNewLine &"Ligne de Commande = "& CommandLine &_
        VbNewLine & "Taille = "& Process_Size & VbNewLine & String(100,"*")
        OutPut.WriteLine Texte
    Next
    OutPut.WriteLine  "Il y a "& Count &" Processus en cours d'exécution le " & date & " à " & time & " sur Le PC "& NomMachine &" connecté en tant que " & NomUtilisateur & vbNewline
    Call StartupCommand()
    Call Explorer(PathNomFichierLog)
    '*************************************************************************************************************************************************
    Function StartupCommand()
        strComputer = "."
        resultat=""
        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
        Set colStartupCommands = objWMIService.ExecQuery ("Select * from Win32_StartupCommand")
        For Each objStartupCommand in colStartupCommands
            resultat=resultat & "Nom: " & objStartupCommand.Name & vbNewline
            resultat=resultat & "Description: " & objStartupCommand.Description & vbNewline
            resultat=resultat & "Emplacement: " & objStartupCommand.Location & vbNewline
            resultat=resultat & "Commande: " & objStartupCommand.Command & vbNewline
            resultat=resultat & "Utilisateur: " & objStartupCommand.User & vbNewline
            resultat=resultat & String(100,"*") & vbNewline 
        Next
        OutPut.WriteLine "[COLOR=""Red""]" & String(50,"*") &" Les éléments à démarrage automatique "& String(40,"*") &"[/COLOR]"
        OutPut.WriteLine resultat & "[/quote]"
    End Function
    '*************************************************************************************************************************************************
    Function Explorer(File)
        Set ws=CreateObject("wscript.shell")
        ws.run "Notepad "& File,1,False
    End Function
    '*************************************************************************************************************************************************
    Function InfoSys()
        strComputer = "."
        strMessage=""
        Set objWMIService = GetObject("winmgmts:"  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
        Set colSettings = objWMIService.ExecQuery  ("Select * from Win32_ComputerSystem")
        Set colSettings2 = objWMIService.ExecQuery ("Select * from Win32_BIOS")
        Set colSettings3 = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
        For Each objBIOS in colSettings2 
            strMessage=strMessage & "[quote]BIOS " & objBIOS.Version & vbNewline & vbNewline
        Next
        For Each objComputer in colSettings 
            strMessage=strMessage & "Nom de l'ordinateur : " & objComputer.Name & vbNewline & "Fabriquant: " & objComputer.Manufacturer & vbNewline & "Modèle : " & objComputer.Model & vbNewline & vbNewline        
        Next
        For Each objOperatingSystem in colSettings3
            strMessage=strMessage &  objOperatingSystem.Name & vbNewline
            strMessage=strMessage &  "Version " & objOperatingSystem.Version & vbNewline
            strMessage=strMessage &  "Service Pack " & objOperatingSystem.ServicePackMajorVersion & "." & objOperatingSystem.ServicePackMinorVersion &vbNewline
            strMessage=strMessage &  "Dossier de Windows: " & objOperatingSystem.WindowsDirectory &vbNewline
        Next
        OutPut.WriteLine strMessage & ""
    end Function
    '****************************************************************************************************************************************************
    Function ConvertSize(Size) 
        Dim CommaLocate
        Do While InStr(Size,",") 'Remove commas from size     
            CommaLocate = InStr(Size,",")     
            Size = Mid(Size,1,CommaLocate - 1) & _         
            Mid(Size,CommaLocate + 1,Len(Size) - CommaLocate) 
        Loop
        Dim Suffix:Suffix = " Bytes" 
        If Size >= 1024 Then suffix = " KB" 
        If Size >= 1048576 Then suffix = " MB" 
        If Size >= 1073741824 Then suffix = " GB" 
        If Size >= 1099511627776 Then suffix = " TB" 
        Select Case Suffix    
        Case " KB" Size = Round(Size / 1024, 1)     
        Case " MB" Size = Round(Size / 1048576, 1)     
        Case " GB" Size = Round(Size / 1073741824, 1)     
        Case " TB" Size = Round(Size / 1099511627776, 1) 
        End Select
        ConvertSize = Size & Suffix 
    End Function
    '*******************************************************************************************************************************************************

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Le code suivant devrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #fonction pour executer a distance via WMI
    $Process_cmd = {
        Param($Target,$exec)
        
        $random = get-random
    
        $cmd = "cmd /c $exec > C:\$random.txt"
    
        $processid = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $Target
    
        do { $resultprocess = Get-WmiObject win32_process -ComputerName $Target | where {$_.processid -eq $processid.processid }
             sleep 1 
           } until ($resultprocess -eq $null)
    
        if (test-path "\\$Target\C$\$random.txt") {
            try {
                $result = Get-Content \\$Target\C$\$random.txt -encoding ascii
            }
            catch {}
    
            try {
                remove-item \\$Target\C$\$random.txt -ErrorAction SilentlyContinue
            }
            catch {}
        }
        return $result
    }
    
    
    $Users = Import-Csv -Path ".\machine.csv" -Delimiter ";"
    
    foreach ($User in $Users) {
      $Process_cmd  -ArgumentList $User.Nom, "d:\nom_executable"
        }

    Voila, tu crée un fichier csv "machine.csv" sous la forme : Nom;Ip dans lequel tu mets tes machines.
    Et normalement c'est tout.

  14. #14
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par moman Voir le message
    Sinon j'ai aussi une question ^^, l’exécution de mon script C:\Install_WSUS.vbs ne donne pas le même résultat lorsque je l’exécute à distance ou en local, cela est un comportement normal ??
    je ne connait pas le contenue de ton script vbs mais certaine action ne sont pas autorisé en exécution à distance

    par contre si tu est en domaine utilise les GPO pour activé WSUS sur les postes, c'est plus simple !

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Merci 6ratgus pour ta réponse.

    Mais au niveau de la GPO il me semble que l'on ai pas maitre du temps ?? Je ne sais pas si c'est la raison, mais pour certaines machines de la plateforme sur laquelle je travail, les GPO pour WSUS ne sont pas d'actualité.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    merci, mais....

    Vous devez fournir une expression de valeur à droite de l'opérateur «*-*».
    Au niveau de C:\Users\Downloads\Sans titre2.ps1*: 33 Caractère*: 18
    + $Process_cmd - <<<< ArgumentList $User.Nom, "d:\.."

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Désolé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #fonction pour executer a distance via WMI
    $Process_cmd = {
        Param($Target,$exec)
        
        $random = get-random
    
        $cmd = "cmd /c $exec > C:\$random.txt"
    
        $processid = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $Target
    
        do { $resultprocess = Get-WmiObject win32_process -ComputerName $Target | where {$_.processid -eq $processid.processid }
             sleep 1 
           } until ($resultprocess -eq $null)
    
        if (test-path "\\$Target\C$\$random.txt") {
            try {
                $result = Get-Content \\$Target\C$\$random.txt -encoding ascii
            }
            catch {}
    
            try {
                remove-item \\$Target\C$\$random.txt -ErrorAction SilentlyContinue
            }
            catch {}
        }
        return $result
    }
    
    
    $Users = Import-Csv -Path ".\machine.csv" -Delimiter ";"
    
    foreach ($User in $Users) {
        $running = @(Get-Job | Where-Object { $_.State -eq 'Running' })
        if ($running.Count -lt 5) {
    		Start-Job -ScriptBlock $Process_cmd  -ArgumentList $User.Nom, "d:\nomexecutable" -name $User.Nom
        } else {
             $running | Wait-Job
    		Start-Job -ScriptBlock $Process_cmd  -ArgumentList $User.Nom, "d:\nomexecutable" -name $User.Nom
        }
        Get-Job | Receive-Job
        }
    Tu remplace ca : d:\nomexecutable

    La tu les lance 5 par 5 au maximum.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Pour tester, je le test sur un seul serveur.

    voici le retour de la commande :

    Id Name State HasMoreData Location Command
    -- ---- ----- ----------- -------- -------
    1 Job1 Running True localhost ...


    Dans le fichier machine.csv

    j'ai dans la cellule A1 : monserveur.domaine.fr;@IP

    ou dois-je les séparer par cellule ?

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Ton retour est normal.
    Quand ton script distant aura fini son exécution tu devrais avoir un truc du genre : Completed False

  20. #20
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    en le relançant ??


    Voici le retour quand je le relance :

    PS C:\Users\\Downloads> & '.\Sans titre3.ps1'

    Id Name State HasMoreData Location Command
    -- ---- ----- ----------- -------- -------
    3 Job3 Running True localhost ...
    Impossible de valider l'argument sur le paramètre «*ComputerName*». L'argument est null ou vide. Indiquez un argument q
    ui n'est pas null ou vide et réessayez.
    + CategoryInfo : InvalidData: ( [Invoke-WmiMethod], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeWmiMethod

    Impossible de valider l'argument sur le paramètre «*ComputerName*». L'argument est null ou vide. Indiquez un argument q
    ui n'est pas null ou vide et réessayez.
    + CategoryInfo : InvalidData: ( [Get-WmiObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetWmiObjectCommand

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/11/2011, 21h13
  2. Réponses: 2
    Dernier message: 01/04/2010, 21h25
  3. Réponses: 3
    Dernier message: 07/01/2009, 11h00
  4. Réponses: 1
    Dernier message: 01/02/2007, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo