2017-09-26 2 views
0

Je suis en train d'utiliser ce script pour installer Python sur l'ordinateur distant. Si je cours ce dossier directement sur le serveur. C'est le fichier Python_Pip_Proxy_PyWinAuto.ps1. Ça marche.Installation à distance de Python à l'aide Powershell échoue en utilisant Invoke-Command

Set-ExecutionPolicy -ExecutionPolicy Unrestricted 
Write-Host("Hi") 
$installer="C:\temp\python-3.6.2.exe" 
& $installer /quiet PrependPath=1 InstallAllUsers=1 TargetDir="C:\Python36" 

Cependant, si je lance le Invoke-Command en utilisant le script suivant pour exécuter cette distance sur le même serveur, il imprime est le message Hi donc je sais que le fichier est en cours d'exécution, mais Python ne soit pas installé.

# Getting the list of servers from a .txt file to an array # 

$SRVListFile = "C:\Scripts\ServerList.txt" 
$SRVList = Get-Content $SRVListFile -ErrorAction SilentlyContinue 

# Copying the .exe file from a shared location to each server in the array # 
# Invoking the .ps1 file which runs natively on each server # 

Foreach($computer in $SRVList) { 

    Get-Service remoteregistry -ComputerName $computer | start-service 
    Copy-item -Path "E:\Software\python-3.6.2.exe" -Destination \\$computer\c$\temp -Recurse 
    Copy-item -Path "C:\My Files\Work\Episode 003 - MongoDB Back Up\Python_GUI.py" -Destination \\$computer\c$\temp -Recurse 
    Invoke-Command -ComputerName $computer -FilePath "C:\My Files\Work\Episode 003 - MongoDB Back Up\Python_Pip_Proxy_PyWinAuto.ps1" 
} 

Qu'est-ce qui ne va pas? À quoi devrais-je changer le code?

Répondre

1

Essayez d'utiliser le paramètre -scriptblock {Your command here} pour exécuter la commande dans la parenthèse scriptblock sur l'ordinateur distant.

Peut-être que vous pouvez le faire comme

$Scriptblock = { 
PowerShell -file "C:\My Files\Work\Episode 003 - MongoDB Back Up\Python_Pip_Proxy_PyWinAuto.ps1" 

"This is Working" | out-file "C:\Hi.txt" 
} 
Invoke-Command -ComputerName $computer -Scriptblock $Scriptblock 

Vous pouvez supprimer la partie Write-Host "Hi" parce que cela donne un caractère interactif du script. Si vous voulez vérifier l'exécution sur l'ordinateur distant, vous pouvez utiliser out-file cmdlet pour créer un fichier sur l'ordinateur distant à titre indicatif.

+0

Merci! Votre solution a fonctionné. Pourquoi pensez-vous que mon chemin a échoué? Ma façon de travailler a été d'installer un autre logiciel appelé Alteryx. –

+0

Pour commencer, le paramètre -filepath est utilisé pour spécifier un fichier de script sur la machine locale (celle que vous exécutez votre script) et non l'ordinateur distant où vous souhaitez l'exécuter. Puisque vous essayez d'exécuter un fichier script sur l'ordinateur distant, vous devez utiliser le paramètre -scriptblock. Vous pouvez alternativement, mettre le script sur votre machine locale et essayer. Cela devrait fonctionner tant que vous avez le fichier d'installation sur un partage réseau accessible depuis l'ordinateur distant. –