3 votes

La commande Powershell échoue avec "Invalid namespace" uniquement lorsqu'elle est exécutée en tant que script, pas en console

Le script suivant échoue sur la dernière ligne avec Get-WmiObject : Invalid namespace :

$password = ConvertTo-SecureString "password" -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ("domain\user", $password )
Write-Host "Entering PS Session..."
Enter-PSSession -Computer hyperVServer -Credential $cred
Start-Sleep -s 5
$server = "servername"

$query = "SELECT * FROM Msvm_ComputerSystem WHERE ElementName='" + $server + "'"
$VM = get-wmiobject -query $query -namespace "root\virtualization" -computername "."

Cependant, lorsque j'entre ces données une par une dans la console, elle s'exécute sans problème.

J'ai ajouté le Start-Sleep en raison de problèmes de timing... la session met quelques secondes à s'ouvrir. Avez-vous une idée de la raison pour laquelle cette ligne n'échouerait que lorsque le programme est exécuté en tant que script ?

2voto

jbsmith Points 1428

Enter-PSSession est destiné uniquement à une utilisation interactive. Si vous souhaitez exécuter des commandes sur un système distant dans un script (de manière non interactive), vous devrez utiliser Invoke-Command à la place. Veuillez exécuter Get-Help Invoke-Command -Full pour plus de détails.

0voto

Cole9350 Points 3890

Je ne sais pas pourquoi cela fonctionne dans l'un et pas dans l'autre, mais je suppose que c'est lié à votre session à distance. Voici une liste de commandes qui ne nécessitent pas de session à distance, mais qui prennent simplement un nom d'ordinateur. http://technet.microsoft.com/en-us/library/dd819505.aspx

$password = ConvertTo-SecureString "password" -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ("domain\user", $password )
$server = "servername"
$query = "SELECT * FROM Msvm_ComputerSystem WHERE ElementName=$server"
$VM = get-wmiobject -query $query -namespace "root\virtualization" -computername hyperVServer -credential $cred

J'ai aussi modifié votre requête concat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X