Question
[Résolu] Exécution de commandes sur server distant
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 1 semaine #6355
par Arnaud Petitjean
Peut-être parce qu'il faut forcer l'interpréteur PowerShell en mode commande.
Essaie comme ça :
[code:1]
invoke-command -scriptblock{& $pcommand}[/code:1]
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Exécution commande serveur distant
Alors j'ai bien le résultat que je cherche
Pq
invoke-command -scriptblock{$pcommand}
ne veut pas m'exécuter la commande et m'affiche son contenu?
Peut-être parce qu'il faut forcer l'interpréteur PowerShell en mode commande.
Essaie comme ça :
[code:1]
invoke-command -scriptblock{& $pcommand}[/code:1]
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- brutosaure
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 59
- Remerciements reçus 0
il y a 16 ans 1 semaine #6356
par brutosaure
Réponse de brutosaure sur le sujet Re:Exécution commande serveur distant
Effectivement quand je mets & avant mavariable, il ne m'affiche plus le contenu, mais j'ai cette erreur.
[code:1]The term 'Get-ChildItem -path d:\Logs\IIS -recurse | where-object{($_.LastWriteTime -ge [datetime]::«»ParseExact(4/3/2010:00:01,'d/M/yyyy:HH:mm',$null)) -and ($_.LastWriteTi
me -le [datetime]::«»ParseExact(07/3/2010:23:59,'d/M/yyyy:HH:mm',$null))}' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the s
pelling of the name, or if a path was included, verify that the path is correct and try again.
+ CategoryInfo : ObjectNotFound: (Get-ChildItem -...HH:mm',$null))}:«»String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException[/code:1]
Message édité par: brutosaure, à: 12/03/10 12:45<br><br>Message édité par: brutosaure, à: 12/03/10 12:45
[code:1]The term 'Get-ChildItem -path d:\Logs\IIS -recurse | where-object{($_.LastWriteTime -ge [datetime]::«»ParseExact(4/3/2010:00:01,'d/M/yyyy:HH:mm',$null)) -and ($_.LastWriteTi
me -le [datetime]::«»ParseExact(07/3/2010:23:59,'d/M/yyyy:HH:mm',$null))}' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the s
pelling of the name, or if a path was included, verify that the path is correct and try again.
+ CategoryInfo : ObjectNotFound: (Get-ChildItem -...HH:mm',$null))}:«»String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException[/code:1]
Message édité par: brutosaure, à: 12/03/10 12:45<br><br>Message édité par: brutosaure, à: 12/03/10 12:45
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 1 semaine #6357
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Exécution commande serveur distant
Visiblement tu as quelques soucis de syntaxe.
Tu dois passer à la variable $command un bloc et non pas une chaine. Utilise à la place des guillemets, des accolades. Ensuite, vire les accolades pour ton appel à Invoke-Command.
J'ai testé ça et ça fonctionne chez moi :
[code:1]
$command= { Get-ChildItem -path $path -recurse | where-object{($_.LastWriteTime -ge [datetime]::«»ParseExact($startDate,'d/M/yyyy:HH:mm',$null)) -and ($_.LastWriteTime -le [datetime]::«»ParseExact($endDate,'d/M/yyyy:HH:mm',$null))} }
invoke-command -scriptblock $command
[/code:1]
Arnaud
Tu dois passer à la variable $command un bloc et non pas une chaine. Utilise à la place des guillemets, des accolades. Ensuite, vire les accolades pour ton appel à Invoke-Command.
J'ai testé ça et ça fonctionne chez moi :
[code:1]
$command= { Get-ChildItem -path $path -recurse | where-object{($_.LastWriteTime -ge [datetime]::«»ParseExact($startDate,'d/M/yyyy:HH:mm',$null)) -and ($_.LastWriteTime -le [datetime]::«»ParseExact($endDate,'d/M/yyyy:HH:mm',$null))} }
invoke-command -scriptblock $command
[/code:1]
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- brutosaure
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 59
- Remerciements reçus 0
il y a 16 ans 1 semaine #6358
par brutosaure
Réponse de brutosaure sur le sujet Re:Exécution commande serveur distant
Effectivement en local pas de problème.
Mais impossible de lancer cette commande sur un serveur distant.
Toi tu as testé en local, chez moi aussi ca fonctionne en local.
Du moins via une variable, quand je mets la commande tel quelle dans invoke-command, ca fonctionne.<br><br>Message édité par: brutosaure, à: 12/03/10 14:44
Mais impossible de lancer cette commande sur un serveur distant.
Toi tu as testé en local, chez moi aussi ca fonctionne en local.
Du moins via une variable, quand je mets la commande tel quelle dans invoke-command, ca fonctionne.<br><br>Message édité par: brutosaure, à: 12/03/10 14:44
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 1 semaine #6361
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Exécution commande serveur distant
Je pense qu'il faudrait s'y prendre autrement; je m'explique.
Lorsqu'on utilise le remoting, en général on prend un script qui fonctionne bien localement et on l'exécute sans le modifier sur une machine distante avec la commande Invoke-Command.
Exemple de code qui fonctionne :
[code:1]
# Brutosaure.ps1
param([datetime]$startDate,[datetime]$endDate,[string]$path,[string]$server)
#Import the crypted text file for login and password
#$user = ./import-credential.ps1 C:\chemin.txt
$command= { Get-ChildItem -path $path -recurse | where-object { (($_.LastWriteTime -ge $startDate) -and ($_.LastWriteTime -le $endDate)) } }
Invoke-Command -scriptblock $command
[/code:1]
Le Invoke-Command est même presque de trop car on pourrait simplement mettre le contenu de la variable $command directement.
Ensuite on appelle ce script ainsi pour l'exécuter sur une machine distante :
[code:1]
PS > Invoke-Command -computer W2K3R2SRV -FilePath C:\scripts\brutosaure.ps1 -argumentlist '03/07/2009','03/13/2010','c:\temp'[/code:1]
Ainsi peux aussi passer un tableau d'ordinateurs au paramètre Computer et ton script s'exécutera sur un ensemble de machines. Le résultat sera de la forme suivante :
[code:1]
Répertoire : C:\temp
Mode LastWriteTime Length Name PSComputerName
----
----
d---- 28/08/2009 19:52 Rep de test w2k3r2srv[/code:1]
Tu trouveras une colonne de résultat de plus, celle nommée PSComputerName qui contiendra le nom de la machine à laquelle le résultat se rapporte.
L'autre approche possible serait d'attaquer directement le filesystem d'une machine distante comme ceci :
[code:1]
PS > Get-Childitem \\W2K3R2SRV\c$\temp | where {...}[/code:1]
Ca fonctionne aussi très bien, et ainsi tu n'as pas besoin d'avoir PowerShell installé sur la machine distante.
Arnaud
Lorsqu'on utilise le remoting, en général on prend un script qui fonctionne bien localement et on l'exécute sans le modifier sur une machine distante avec la commande Invoke-Command.
Exemple de code qui fonctionne :
[code:1]
# Brutosaure.ps1
param([datetime]$startDate,[datetime]$endDate,[string]$path,[string]$server)
#Import the crypted text file for login and password
#$user = ./import-credential.ps1 C:\chemin.txt
$command= { Get-ChildItem -path $path -recurse | where-object { (($_.LastWriteTime -ge $startDate) -and ($_.LastWriteTime -le $endDate)) } }
Invoke-Command -scriptblock $command
[/code:1]
Le Invoke-Command est même presque de trop car on pourrait simplement mettre le contenu de la variable $command directement.
Ensuite on appelle ce script ainsi pour l'exécuter sur une machine distante :
[code:1]
PS > Invoke-Command -computer W2K3R2SRV -FilePath C:\scripts\brutosaure.ps1 -argumentlist '03/07/2009','03/13/2010','c:\temp'[/code:1]
Ainsi peux aussi passer un tableau d'ordinateurs au paramètre Computer et ton script s'exécutera sur un ensemble de machines. Le résultat sera de la forme suivante :
[code:1]
Répertoire : C:\temp
Mode LastWriteTime Length Name PSComputerName
----
----
d---- 28/08/2009 19:52 Rep de test w2k3r2srv[/code:1]
Tu trouveras une colonne de résultat de plus, celle nommée PSComputerName qui contiendra le nom de la machine à laquelle le résultat se rapporte.
L'autre approche possible serait d'attaquer directement le filesystem d'une machine distante comme ceci :
[code:1]
PS > Get-Childitem \\W2K3R2SRV\c$\temp | where {...}[/code:1]
Ca fonctionne aussi très bien, et ainsi tu n'as pas besoin d'avoir PowerShell installé sur la machine distante.
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- brutosaure
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 59
- Remerciements reçus 0
il y a 16 ans 1 semaine #6364
par brutosaure
Réponse de brutosaure sur le sujet Re:Exécution commande serveur distant
Merci Arnaud et aux autres, je vais creuser pour cette approche.
Je crois que tu as raison, ce sera plus efficace
Je crois que tu as raison, ce sera plus efficace
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.051 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Exécution de commandes sur server distant