Question Invoke-Command

Plus d'informations
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 :unsure:)

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.

Plus d'informations
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]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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 \&quot;V:\Sauv_VHD\Scripts\password.txt\&quot; | Convertto-SecureString
$login = \&quot;domaine\admin\&quot;
$credentials = New-Object -Typename System.Management.Automation.Pscredential -Argumentlist $login,$password

$ImportServeur = Import-Csv -Path \&quot;W:\SAUVEGARDE\SAUVEGARDE_VHD\ListeServeurs.csv\&quot; -Delimiter \&quot;;\&quot;


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.

Plus d'informations
il y a 9 ans 7 mois #22528 par Philippe
Réponse de Philippe sur le sujet Re:Invoke-Command

j'avais aussi essayé cette solution mais il me retournait la même erreur...
si je reprends le code

tu a mal repris 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.

Plus d'informations
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
Propulsé par Kunena