Ton fichier de machines est bien dans le meme répertoire que ton script ??
Il est bien constitué : Nom;IP
Machine1;@IP machine1
Machine2;@IP machine2 ??
Ton fichier de machines est bien dans le meme répertoire que ton script ??
Il est bien constitué : Nom;IP
Machine1;@IP machine1
Machine2;@IP machine2 ??
oui oui,
dans un fichier csv portant le même nom que dans ton script.
Avec dans la cellule A1 : serveur.domaine.fr;@ip
Je me suis peut être mal exprimé :
dans ta cellule A1 met "Nom" dans ta cellule B1 met "IP"
dans A2 met "nom de ta machine" dans B2 met "@IP de ta machine"
ahhh ok
j'ai changé le fichier. le retour de la commande :
PS C:\Users\s0075871\Downloads> & '.\Sans titre3.ps1'
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 serveur.dom... Running True localhost ...
mais rien dans les logs du serveur
Supprime le morceau de code
Tu devrais avoir un log de type 2132654654.txt dans le répertoire de ton script distant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 try { remove-item \\$Target\C$\$random.txt -ErrorAction SilentlyContinue } catch {}
Je ne sais pas ce que ton script distant fait, mais lorsqu'il fini son exécution, sur ta fenêtre powershell doit s'afficher :
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Running True localhost ...
1 Job1 Completed False localhost ...
j'ai pas le fichier de log dans le répertoire distant.
en supprimant la ligne, cela ne change rien à l'execution
Ton script distant fait quoi ??
Essaie avec un script qui fait quelque chose de simple.
Si tu n'a pas vu :
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Running True localhost ...
1 Job1 Completed False localhost ...
c'est que ton script distant n'a pas fini son job.
il lance une autre commande
en gros j'ai deux actions à faire. dans un premier temps lancer un cmd. puis un vbs.
Mon script pour le vbs fonctionne, mais pas pour le cmd.
Un script avec psexec ne fonctionne pas avec du cmd.
Je n'ai pas tout compris ^^
Mais quand tu lance tes scripts en local ils fonctionnent ??
dans le script que tu as fait, il y a t'il la possibilité d'intégrer une mire d'authentification ? (login +mdp (avec domaine différant)) pour exécuter ce cmd distant avec un identifiant différant ?
tu as quoi en tête comme méthode ?
pour vous aidées à faire avancé les choses, ci-dessous le code pour la fonction "Process_cmd_user" avec le passage d'un login et mot de passe (en clair, non scrypté avec credential)
pour info on utilise cette fonction avec un utilisateur admin sinon il ne peut pas généré le fichier de retour a la racine du disque C: !
pour un utilisateur "normal" il faut trouvé un dossier ou il a les droit en écriture. (pas si facile que ca)
pour demande le login et mot de passe le code suivant devrait suffire :
un exemple d'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $login = Read-Host -Prompt "ton login" $password = Read-Host -Prompt "ton mot de passe"
Code : Sélectionner tout - Visualiser dans une fenêtre à part Process_cmd_user $ordi "domain\$login" $motDePasse "gpupdate /force"
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 function Process_cmd_user { Param($Target, $login, $password, $exec) $random = get-random #cmd to execute remotely $cmd = "cmd /c $exec > C:\$random.txt" #execute the cmd remotely $pwdscurestring = Convertto-SecureString -AsPlainText $password -Force $Credential = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $login, $pwdscurestring $processid = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $Target -Credential $Credential -WarningAction SilentlyContinue -ErrorAction SilentlyContinue if ($processid -ne $null) { #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 copy-item -path \\$Target\C$\$random.txt -destination .\ #get the log content create by the cmd $result=Get-Content .\$random.txt -encoding ascii #remove the log remove-item \\$Target\C$\$random.txt remove-item .\$random.txt } else { $result = "" } return $result }
Salut 6ratgus,
merci pour ton aide. Mais j'avoue ne plus rien comprendre... Déja que je nage pas mal...
Donc, pour résumer :
c'est ca ?
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
43
44
45
46
47
48
49
50 #Ici, je mets mes identifiant $login = Read-Host -Prompt "ton login" $password = Read-Host -Prompt "ton mot de passe" #ici, je ne vois pas trop à quoi ca serre.... Process_cmd_user $ordi "domain\$login" $motDePasse "gpupdate /force" function Process_cmd_user { Param($Target, $login, $password, $exec) $random = get-random #ici, c'est mon fichier cmd en local sur les serveurs à lancer, je remplace donc par le chemin de mon cmd $cmd = "cmd /c $exec > C:\$random.txt" #Et ici, en gros, c'est le script qui va exectuer le cmd à distance $pwdscurestring = Convertto-SecureString -AsPlainText $password -Force $Credential = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $login, $pwdscurestring $processid = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $Target -Credential $Credential -WarningAction SilentlyContinue -ErrorAction SilentlyContinue if ($processid -ne $null) { #là on attand que la commande soit OK do { $resultprocess = Get-WmiObject win32_process -ComputerName $Target | where {$_.processid -eq $processid.processid } sleep 1 } until ($resultprocess -eq $null) #là, création d'un fichier de log sur le serveur distant où se trouve le cmd à lancer (pas besoin de l'absolu) copy-item -path \\$Target\C$\$random.txt -destination .\ #get the log content create by the cmd $result=Get-Content .\$random.txt -encoding ascii #suppression du log distant remove-item \\$Target\C$\$random.txt remove-item .\$random.txt } else { $result = "" } return $result }
j'ai pas mal de point que je ne comprend pas...
oui c'est ça, sauf que la fonction doit être déclaré au debut
sinon je te laisse poursuivre avec moman qui te donnais la bonne marche à suivre !
qu’entends tu par fonction ?
Je ne visualise pas son utilité
comme ceci :
c'est pour l'exemple bien sur, c'est à toi de l'adapté à ton script ou celui de moman
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
43
44
45
46
47
48 #Ici, je mets mes identifiant $login = Read-Host -Prompt "ton login" $password = Read-Host -Prompt "ton mot de passe" function Process_cmd_user { Param($Target, $login, $password, $exec) $random = get-random #ici, c'est mon fichier cmd en local sur les serveurs à lancer, je remplace donc par le chemin de mon cmd $cmd = "cmd /c $exec > C:\$random.txt" #Et ici, en gros, c'est le script qui va exectuer le cmd à distance $pwdscurestring = Convertto-SecureString -AsPlainText $password -Force $Credential = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $login, $pwdscurestring $processid = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $Target -Credential $Credential -WarningAction SilentlyContinue -ErrorAction SilentlyContinue if ($processid -ne $null) { #là on attand que la commande soit OK do { $resultprocess = Get-WmiObject win32_process -ComputerName $Target | where {$_.processid -eq $processid.processid } sleep 1 } until ($resultprocess -eq $null) #là, création d'un fichier de log sur le serveur distant où se trouve le cmd à lancer (pas besoin de l'absolu) copy-item -path \\$Target\C$\$random.txt -destination .\ #get the log content create by the cmd $result=Get-Content .\$random.txt -encoding ascii #suppression du log distant remove-item \\$Target\C$\$random.txt remove-item .\$random.txt } else { $result = "" } return $result } #ici, l'appel de la fonction ci-dessus pour l'exemple bien sur a toi de l'adapté a ton script Process_cmd_user $ordi "domain\$login" $motDePasse "gpupdate /force"
tu trouvera ici les bases indispensables pour la programmation en powershell
Merci de votre aide. Je vais me débrouiller.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager