Question
Envoyer un fichier par script
- Virtual76
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 12
- Remerciements reçus 0
Je suis confronté à un problème dont je n'arrive pas à me dépatouiller.
Avec un script Powershell, je dois déployer une application en .msi sur un ensemble de serveurs. Ces serveurs sont sécurisés donc pas d'accès sur des partages réseau, pas de possibilité de téléchargement sur internet...
J'arrive à envoyer des commandes Powershell avec la commande \"Invoke\" après m'être authentifié sur le serveur mais impossible d'installer mon .msi étant donné que le serveur ne voit rien sur le réseau.
Je précise que j'ai bien les droits administrateur sur les deux machines et qu'un simple copié collé en bureau a distance fonctionne sans problème pour installer mon .msi (mais je dois le faire de manière automatisé donc avec un script).
Est-il possible d'envoyer mon .msi via Powershell (sans ajout de module ou application tierce)? Quelqu'un a t-il une solution à ce problème?
Merci d'avance
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
regarde l'option \"EnableNetworkAccess\" de Invoke-Command .J'arrive à envoyer des commandes Powershell avec la commande \"Invoke\" après m'être authentifié sur le serveur mais impossible d'installer mon .msi étant donné que le serveur ne voit rien sur le réseau.
ça autorise les accès réseaux dans certain cas !
Copy-Item te permet de copié des fichiers, ça peut suffire ?Est-il possible d'envoyer mon .msi via Powershell (sans ajout de module ou application tierce)?
Connexion ou Créer un compte pour participer à la conversation.
- Virtual76
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 12
- Remerciements reçus 0
J'ai essayé avec EnableNetworkAccess mais cela ne donne rien.
J'ai également un problème avec le Copy-item. Mon script doit pouvoir s’exécuter à partir de plusieurs machines clientes, donc les emplacements vont changer. Le chemin pour la source n'est donc pas fixe. Je n'arrive pas à faire passer une variable locale dans mon \"invoke-command\" avec \"-ArgumentList\" renvoi des variables vides.
Plus généralement, je suis débutant en Powershell mais je surpris qu'il n'existe pas un moyen simple d'installer un fichier .msi à distance sur plusieurs machines.
Quelqu'un à déjà écrit un script présentant les mêmes besoins???
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
je comprend pas le problèmeJ'ai également un problème avec le Copy-item. Mon script doit pouvoir s’exécuter à partir de plusieurs machines clientes, donc les emplacements vont changer.
a tu des messages d'erreurs ?
peut tu nous montré ton script !
bienvenue chez powershell and coPlus généralement, je suis débutant en Powershell
si ça existe WSUS ou SCCM ou encore d'autres appli tierces d'installation à distance si tu est prêt a payé !!!mais je surpris qu'il n'existe pas un moyen simple d'installer un fichier .msi à distance sur plusieurs machines.
powershell n'est pas développé pour ça mais peut être utilisé à ça !
je l'utilise régulièrement pour l'installation à distanceQuelqu'un à déjà écrit un script présentant les mêmes besoins???
j'utilise les solutions que je t'ai donné mais chaque appli à des spécifications que je ne peut adapté pour toi
Connexion ou Créer un compte pour participer à la conversation.
- Virtual76
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 12
- Remerciements reçus 0
Voici mon script :
[code:1]
#J'execute ce script sur \"MachineLocal\" pour une copie et ensuite une installation sur \"MachineDistante\".
#L'agent Zabbix en .msi est situé juste a coté du Script.
Import-Module ActiveDirectory
$MachineDistante = (Get-ADComputer MACHINEDISTANTE).Name
#Récupération du nom de la machine distante
$Creds = Get-Credential -Message \"Connexion sur $MachineDistante (Domain\Nom)\"
#récupération des identifiants pour cette machine
$PathLocal = Get-Location
#Récupération de la localisation du script sur la machine local dans le but de pouvoir l'éxécuter a partir de n'importe quel dossier.
$Host = hostname
New-PSSession -ComputerName $MachineDistante -Credential $Creds -EnableNetworkAccess
$Copy = {
$User = Get-Content env:username
Copy-Item \"\\$Host\$PathLocal\zabbix_agent.msi\" -Destination \"\\$MachineDistante\C:\$User\Desktop\\"
#Copie du fichier sur le machine distante
}
Invoke-Command -ComputerName $NomOrdi -Credential $Creds -ScriptBlock $Copy
#Dans un premier temps on copie le fichier sur la machine distante sur laquelle on souhaite l'installer
$Install = {
$Args = \"-i \\$MachineDistante\C:\$User\Desktop\zabbix_agent.msi HOSTNAME=$MachineDistante SERVER=x.x.x.x LPORT=xxxx SERVERACTIVE=x.x.x.x RMTCMD=1 /qn\"
[diagnostics.process]::«»start(\"msiexec.exe\", $Args).WaitForExit()
}
Invoke-Command -ComputerName $MachineDistante -Credential $Creds -ScriptBlock $Install
#Dans un deuxième temps on execute l'installation du fichier précédemment copié
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
- tu peut le sortir de la session pour l'exécuté
- si besoin tu peut rajouté le credential de pssession en paramètre
par exemple :
[code:1]Copy-Item -Path \"\\$Host\$PathLocal\zabbix_agent.msi\" -Destination \"\\$MachineDistante\C$\$User\Desktop\\" -Credential $Creds[/code:1]
évidement ta variable $user ne marche plus !
soit tu la saisie en plus du credential
soit utilise un autre dossier plus generique pour l'install. le dossier temp de Windows ou tien la racine du disque
[code:1]c:\windows\temp
ou
c:\temp[/code:1]
soit tu fabrique ton credential autrement
[code:1]$user = Read-Host -Prompt \"login utilisateur\"
$mdp = Read-Host -Prompt \"mot de passe pour $user\"
$Creds = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $user, $mdp
[/code:1]
pour msiexec :
- tu peut remplacé ceci
[code:1][diagnostics.process]::«»start(\"msiexec.exe\", $Args).WaitForExit()[/code:1]par[code:1]Start-Process -FilePath \"C:\Windows\System32\msiexec.exe\" -ArgumentList $args -Wait[/code:1]
pour New-PSSession :
- New-PSSession renvoie un identifient de session, que tu doit gardé pour le réutilisé dans invoke-command, sinon l'option EnableNetworkAccess n'a pas effet !!
[code:1]$session = New-PSSession -ComputerName $MachineDistante -Credential $Creds -EnableNetworkAccess
Invoke-Command -ScriptBlock $Install -Session $session[/code:1]
ainsi les variables gardent leurs valeurs pendant toute la durée de vie de la session !
en fin de script n'oublie pas de fermé la session sinon tu vite te retrouvé bloqué pendant les tests !
[code:1]Remove-PSSession $session[/code:1]
dans le cas contraire tu peut fermé toutes les sessions de ton pc avec cette commande :
[code:1]Get-PSSession | Remove-PSSession[/code:1]
voila j'espère que ça t'aidera à avancé
pour info cette ecriture ne marche pas :
[code:1]\"\\$MachineDistante\C:\$User\Desktop\\"[/code:1]
le C: n'existe pas dans un partage windows, tu doit utilisé C$
n'hésite pas à venir pour avoir plus d'info ou si ta des questions !<br><br>Message édité par: 6ratgus, à: 31/05/16 17:57
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Envoyer un fichier par script