Question
Invoke-Command
- kiviste
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 34
- Remerciements reçus 0
il y a 9 ans 7 mois #22521
par kiviste
Invoke-Command a été créé par kiviste
Bonjour,
(3eme poste en quelques temps après j'arrête
)
je souhaites exécuter une commande \"invoke-command\" mais je me heurte toujours au problème d'argument. j'ai pas du tout comprendre le manuel
donc si je reprends mon script avec la commande start-job
[code:1]
$password = Get-Content \"V:\Sauv_VHD\Scripts\password.txt\"Convertto-SecureString
$login = \"domaine\admin\"
$credentials = New-Object -Typename System.Management.Automation.Pscredential -Argumentlist $login,$password
# Import du ficher .CSV
$ImportServeur = Import-Csv -Path W:\SAUVEGARDE\SAUVEGARDE_VHD\ListeServeurs.csv -Delimiter \";\"
ForEach ($Serveur in $ImportServeur)
{
$SERVEUR_HOTE = $Serveur.(“$SERVEUR_HOTE”)
$SERVEUR_VIRT = $Serveur.(“$SERVEUR_VIRT”)
$arguments = @($SERVEUR_HOTE,$SERVEUR_VIRT,$credentials)
Start-Job -ArgumentList $arguments -ScriptBlock {
$VMName = -SERVEUR_VIRT $args[0]
$SHVName = -SERVEUR_HOTE $args [1]
$cred = $args[2]
Invoke-Command -ComputerName $SHVName -Credential $cred {Get-VM $VMName}
}
}
Get-Job | Wait-Job
Get-Job | Receive-Job
[/code:1]
ici j'ai un problème avec ma variable $VMName dans la commande Invoke-Command. l'argument est NULL ou Vide.
[code:1]Impossible de valider l'argument sur le paramètre « Name ». L’argument est Null ou vide. Indiquez un argument qui n’est pas Null ou vide et réessayez.
+ CategoryInfo : InvalidData : (:«») [Get-VM], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.HyperV.PowerShell.Commands.GetVMCommand
+ PSComputerName : localhost[/code:1]
mais ma variable $VMName est pas local elle est passée plus haut en argument, elle n'est pas vide...
c'est quoi la différence avec la commande ci-dessous qui elle fonctionne sans le start-job
Invoke-Command -ComputerName $Serveur.$SERVEUR_HOTE -ArgumentList $SERVEUR_VIRT -Credential $cred -scriptblock {param($SERVEUR_VIRT) Get-VM $SERVEUR_VIRT}
ici j'ai ma variable $SERVEUR_VIRT qui est aussi passé en argument...

un indice ?<br><br>Message édité par: kiviste, à: 20/10/16 12:20
(3eme poste en quelques temps après j'arrête
je souhaites exécuter une commande \"invoke-command\" mais je me heurte toujours au problème d'argument. j'ai pas du tout comprendre le manuel
donc si je reprends mon script avec la commande start-job
[code:1]
$password = Get-Content \"V:\Sauv_VHD\Scripts\password.txt\"Convertto-SecureString
$login = \"domaine\admin\"
$credentials = New-Object -Typename System.Management.Automation.Pscredential -Argumentlist $login,$password
# Import du ficher .CSV
$ImportServeur = Import-Csv -Path W:\SAUVEGARDE\SAUVEGARDE_VHD\ListeServeurs.csv -Delimiter \";\"
ForEach ($Serveur in $ImportServeur)
{
$SERVEUR_HOTE = $Serveur.(“$SERVEUR_HOTE”)
$SERVEUR_VIRT = $Serveur.(“$SERVEUR_VIRT”)
$arguments = @($SERVEUR_HOTE,$SERVEUR_VIRT,$credentials)
Start-Job -ArgumentList $arguments -ScriptBlock {
$VMName = -SERVEUR_VIRT $args[0]
$SHVName = -SERVEUR_HOTE $args [1]
$cred = $args[2]
Invoke-Command -ComputerName $SHVName -Credential $cred {Get-VM $VMName}
}
}
Get-Job | Wait-Job
Get-Job | Receive-Job
[/code:1]
ici j'ai un problème avec ma variable $VMName dans la commande Invoke-Command. l'argument est NULL ou Vide.
[code:1]Impossible de valider l'argument sur le paramètre « Name ». L’argument est Null ou vide. Indiquez un argument qui n’est pas Null ou vide et réessayez.
+ CategoryInfo : InvalidData : (:«») [Get-VM], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.HyperV.PowerShell.Commands.GetVMCommand
+ PSComputerName : localhost[/code:1]
mais ma variable $VMName est pas local elle est passée plus haut en argument, elle n'est pas vide...
c'est quoi la différence avec la commande ci-dessous qui elle fonctionne sans le start-job
Invoke-Command -ComputerName $Serveur.$SERVEUR_HOTE -ArgumentList $SERVEUR_VIRT -Credential $cred -scriptblock {param($SERVEUR_VIRT) Get-VM $SERVEUR_VIRT}
ici j'ai ma variable $SERVEUR_VIRT qui est aussi passé en argument...
un indice ?<br><br>Message édité par: kiviste, à: 20/10/16 12:20
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 7 mois #22525
par Philippe
Réponse de Philippe sur le sujet Re:Invoke-Command
salut kiviste
tu doit faire le même passage de parametre pour invoke-command que tu a fait pour start-job
invoke-command fait comme start-job il lance un job indépendant qui n'a donc pas accès au variable de ton script
une explication ici sur le passage de parametre
une solution simple
[code:1]Invoke-Command -ComputerName $SHVName -Credential $cred -ArgumentList $VMName {Get-VM $args[0]}
[/code:1]
tu doit faire le même passage de parametre pour invoke-command que tu a fait pour start-job
invoke-command fait comme start-job il lance un job indépendant qui n'a donc pas accès au variable de ton script
une explication ici sur le passage de parametre
une solution simple
[code:1]Invoke-Command -ComputerName $SHVName -Credential $cred -ArgumentList $VMName {Get-VM $args[0]}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- kiviste
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 34
- Remerciements reçus 0
il y a 9 ans 7 mois #22526
par kiviste
Réponse de kiviste sur le sujet Re:Invoke-Command
Salut 6ratgus,
merci pour ta réponse.. j'avais aussi essayé cette solution mais il me retournait la même erreur...
[code:1]Impossible de valider l'argument sur le paramètre « Name ». L’argument est Null ou vide. Indiquez un argument qui n’est pas Null ou vide et réessayez.
+ CategoryInfo : InvalidData : (:«») [Get-VM], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.HyperV.PowerShell.Commands.GetVMCommand
+ PSComputerName : localhost[/code:1]
si je reprends le code
[code:1]$password = Get-Content \"V:\Sauv_VHD\Scripts\password.txt\" | Convertto-SecureString
$login = \"domaine\admin\"
$credentials = New-Object -Typename System.Management.Automation.Pscredential -Argumentlist $login,$password
$ImportServeur = Import-Csv -Path \"W:\SAUVEGARDE\SAUVEGARDE_VHD\ListeServeurs.csv\" -Delimiter \";\"
ForEach ($Serveur in $ImportServeur)
{
$SERVEUR_HOTE = $Serveur.SERVEUR_HOTE
$SERVEUR_VIRT = $Serveur.SERVEUR_VIRT
$arguments = @($SERVEUR_HOTE,$SERVEUR_VIRT,$credentials)
Start-Job -ArgumentList $arguments -ScriptBlock {
# Paramétrage des variables avec les arguments
$SHVName = $args[0]
$VMName = $args[1]
$cred = $args[2]
Invoke-Command -ComputerName $SHVName -Credential $cred -ArgumentList $VMName {Get-VM $args[1]}
}
}
Get-Job | Wait-Job
Get-Job | Receive-Job
# Suppression des jobs
Get-Job | Remove-Job -Force [/code:1]<br><br>Message édité par: kiviste, à: 21/10/16 09:33
merci pour ta réponse.. j'avais aussi essayé cette solution mais il me retournait la même erreur...
[code:1]Impossible de valider l'argument sur le paramètre « Name ». L’argument est Null ou vide. Indiquez un argument qui n’est pas Null ou vide et réessayez.
+ CategoryInfo : InvalidData : (:«») [Get-VM], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.HyperV.PowerShell.Commands.GetVMCommand
+ PSComputerName : localhost[/code:1]
si je reprends le code
[code:1]$password = Get-Content \"V:\Sauv_VHD\Scripts\password.txt\" | Convertto-SecureString
$login = \"domaine\admin\"
$credentials = New-Object -Typename System.Management.Automation.Pscredential -Argumentlist $login,$password
$ImportServeur = Import-Csv -Path \"W:\SAUVEGARDE\SAUVEGARDE_VHD\ListeServeurs.csv\" -Delimiter \";\"
ForEach ($Serveur in $ImportServeur)
{
$SERVEUR_HOTE = $Serveur.SERVEUR_HOTE
$SERVEUR_VIRT = $Serveur.SERVEUR_VIRT
$arguments = @($SERVEUR_HOTE,$SERVEUR_VIRT,$credentials)
Start-Job -ArgumentList $arguments -ScriptBlock {
# Paramétrage des variables avec les arguments
$SHVName = $args[0]
$VMName = $args[1]
$cred = $args[2]
Invoke-Command -ComputerName $SHVName -Credential $cred -ArgumentList $VMName {Get-VM $args[1]}
}
}
Get-Job | Wait-Job
Get-Job | Receive-Job
# Suppression des jobs
Get-Job | Remove-Job -Force [/code:1]<br><br>Message édité par: kiviste, à: 21/10/16 09:33
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 7 mois #22528
par Philippe
quand tu utilise le passage de paramètre en utilisant la variable $args[], le premier paramètre commence à zero ! donc ta comande doit etre {Get-VM $argscolor=#FF0000]0[/color}
et donc le ligne :
[code:1]Invoke-Command -ComputerName $SHVName -Credential $cred -ArgumentList $VMName {Get-VM $args[0]}
[/code:1]
Réponse de Philippe sur le sujet Re:Invoke-Command
tu a mal repris le codej'avais aussi essayé cette solution mais il me retournait la même erreur...
si je reprends le code
quand tu utilise le passage de paramètre en utilisant la variable $args[], le premier paramètre commence à zero ! donc ta comande doit etre {Get-VM $argscolor=#FF0000]0[/color}
et donc le ligne :
[code:1]Invoke-Command -ComputerName $SHVName -Credential $cred -ArgumentList $VMName {Get-VM $args[0]}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- kiviste
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 34
- Remerciements reçus 0
il y a 9 ans 6 mois #22556
par kiviste
Réponse de kiviste sur le sujet Re:Invoke-Command
Merci encore pour ton aide 6ratgus
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.039 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Invoke-Command