Meilleur auteur de réponses
Powershell: Jeton « in » inattendu dans une expression ou une instruction.

Question
-
Bonjour,
Je débute en powershell et j'ai quelques difficultés avec le petit bout de code ci dessous.
Pouvez-vous m'aider?
$LocalPass = cat C:\temp\LocalSecFile.txt | convertto-securestring $MyLocalCred = new-object -typename System.Management.Automation.PSCredential -argumentlist "TargetForest\admin",$LocalPass $RemotePass = cat C:\temp\RemoteSecFile.txt | convertto-securestring $MyRemoteCred = new-object -typename System.Management.Automation.PSCredential -argumentlist "SrcForest\admin",$RemotePass $WorkFile = import-csv -path "c:\temp\UsersToMigrate.csv" $ExecPath = "C:\Program Files\Microsoft\Exchange Server\V14\Scripts\" $LocalAD = "x.targetforest.dom" $RemoteAD = "y.srcforest.dom" $OUcible = "ou=mailboxfra,ou=FRANCE,ou=utilisateurs,dc=x,dc=targetforest,dc=dom" $Workfile| foreach ( $strUser in $ColUsers) { Remove-MailContact -Identity “$_.sourceEmail” -Confirm:$FALSE {$ExecPath}Prepare-MoveRequest.Ps1 -Identity “$_.sourceEmail” -RemoteForestDomainController $RemoteAD -RemoteForestCredential $RemoteCredentials -LocalForestDomainController $LocalAD -LocalForestCredential $LocalCredentials -TargetMailUserOU $OUcible –LinkedMailuser -Verbose }
Merci
Orwell
Réponses
-
Bonjour Laurent,
Finalement trouvé la solution à mon problème.
Il y avait plusieurs petits trucs qui n'étaient pas bon.finalement j'ai modifié mon script comme suit:
$LocalPass = cat C:\temp\LocalSecFile.txt | convertto-securestring $LocalCredentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "targetforest\admin",$LocalPass $RemotePass = cat C:\temp\RemoteSecFile.txt | convertto-securestring $RemoteCredentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "sourceforest\admin",$RemotePass $WorkFile = import-csv -path "C:\temp\Users.csv" $ExecPath = "C:\Program Files\Microsoft\Exchange Server\V14\Scripts" $LocalAD = "target-dc.targetforest.dom" $RemoteAD = "souce-dc.sourceforest.dom" $OUcible = "ou=mailboxfra,ou=FRANCE,ou=utilisateurs,dc=targetforest,dc=dom" foreach ($User in $WorkFile){ Write-Host $User.SourceEmail Remove-MailContact -Identity $user.SourceEmail -Confirm:$FALSE & $ExecPath\Prepare-MoveRequest.Ps1 -Identity $user.SourceEmail -RemoteForestDomainController $RemoteAD -RemoteForestCredential $RemoteCredentials -LocalForestDomainController $LocalAD -LocalForestCredential $LocalCredentials -TargetMailUserOU $OUcible –LinkedMailuser -Verbose }
ET dans mon CSV j'ai remplacé les points-virgules par des virgules car le import-csv prend comme séparateur par défaut la virgule.
Merci en tout cas pour l'aide et le temps que tu m'as accordé.
Orwell
- Proposé comme réponse Dan BajenaruMicrosoft employee jeudi 21 février 2013 12:33
- Marqué comme réponse Florin Ciuca lundi 25 février 2013 12:53
Toutes les réponses
-
Bonjour,
essaie ceci :
$Workfile| foreach-Object{ Remove-MailContact -Identity $_.sourceEmail -Confirm:$FALSE "$ExecPath\Prepare-MoveRequest.Ps1" -Identity $_.sourceEmail -RemoteForestDomainController $RemoteAD -RemoteForestCredential $RemoteCredentials -LocalForestDomainController $LocalAD -LocalForestCredential $LocalCredentials -TargetMailUserOU $OUcible –LinkedMailuser -Verbose }
Ensuite pour comprendre le distinguo entre l'instruction et le cmdlet :
get-help foreach -full
help about_Foreach
Beatus, qui prodest, quibus potest.
-
-
>>ça me donne une autre erreur toujours aussi floue pour moi.
Hors contexte elle l'est aussi pour moi :/
A première vue, il y a un mixte entre un appel de script et une suite de paramètre d'un cmdlet Exchange.
Il manque peut être l'opérateur d'appel sur la ligne en cause , le symbole & :
&""$ExecPath\Prepare-MoveRequest.Ps1" -Identity ...
>>Gratias tibi ago quodme adiuvit
De rien Georges.
Beatus, qui prodest, quibus potest.
-
Bonjour Laurent,
Finalement je n'ai toujours pas résolu mon problème, mais en mettant la commande entre simples quotes mon problème a légèrement évolué mais je ne comprends toujours pas pourquoi ça ne fonctionne pas.
$LocalPass = cat C:\temp\LocalSecFile.txt | convertto-securestring $MyLocalCred = new-object -typename System.Management.Automation.PSCredential -argumentlist "TargetForest\admin",$LocalPass $RemotePass = cat C:\temp\RemoteSecFile.txt | convertto-securestring $MyRemoteCred = new-object -typename System.Management.Automation.PSCredential -argumentlist "SrcForest\admin",$RemotePass $WorkFile = import-csv -path "c:\temp\UsersToMigrate.csv" $ExecPath = "C:\Program Files\Microsoft\Exchange Server\V14\Scripts\" $LocalAD = "x.targetforest.dom" $RemoteAD = "y.srcforest.dom" $OUcible = "ou=mailboxfra,ou=FRANCE,ou=utilisateurs,dc=x,dc=targetforest,dc=dom" $Workfile| foreach ( $strUser in $ColUsers) { Remove-MailContact -Identity “$_.sourceEmail” -Confirm:$FALSE '$ExecPath\Prepare-MoveRequest.Ps1 -Identity $_.sourceEmail -RemoteForestDomainController $RemoteAD -RemoteForestCredential $RemoteCredentials -LocalForestDomainController $LocalAD -LocalForestCredential $LocalCredentials -TargetMailUserOU $OUcible –LinkedMailuser -Verbose' }
Orwell
- Modifié G-Orwell mercredi 20 février 2013 09:44
-
Dans ton script remplace ceci :
$Workfile| foreach ( $strUser in $ColUsers) { Remove-MailContact -Identity “$_.sourceEmail” -Confirm:$FALSE {$ExecPath}Prepare-MoveRequest.Ps1 -Identity “$_.sourceEmail” -RemoteForestDomainController $RemoteAD -RemoteForestCredential $RemoteCredentials -LocalForestDomainController $LocalAD -LocalForestCredential $LocalCredentials -TargetMailUserOU $OUcible –LinkedMailuser -Verbose }
par :
$Workfile| foreach-Object{ Write-Warning "Test: $($_.sourceEmail -eq $null)`t $($_.sourceEmail)"
Remove-MailContact -Identity $_.sourceEmail -Confirm:$FALSE &"$ExecPath\Prepare-MoveRequest.Ps1" -Identity $_.sourceEmail -RemoteForestDomainController $RemoteAD -RemoteForestCredential $RemoteCredentials -LocalForestDomainController $LocalAD -LocalForestCredential $LocalCredentials -TargetMailUserOU $OUcible –LinkedMailuser -Verbose }
Et informe-nous du résultat affiché.
Beatus, qui prodest, quibus potest.
- Modifié Dardenne LaurentMVP, Moderator jeudi 21 février 2013 10:19 coquille
-
Bonjour Laurent,
Finalement trouvé la solution à mon problème.
Il y avait plusieurs petits trucs qui n'étaient pas bon.finalement j'ai modifié mon script comme suit:
$LocalPass = cat C:\temp\LocalSecFile.txt | convertto-securestring $LocalCredentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "targetforest\admin",$LocalPass $RemotePass = cat C:\temp\RemoteSecFile.txt | convertto-securestring $RemoteCredentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "sourceforest\admin",$RemotePass $WorkFile = import-csv -path "C:\temp\Users.csv" $ExecPath = "C:\Program Files\Microsoft\Exchange Server\V14\Scripts" $LocalAD = "target-dc.targetforest.dom" $RemoteAD = "souce-dc.sourceforest.dom" $OUcible = "ou=mailboxfra,ou=FRANCE,ou=utilisateurs,dc=targetforest,dc=dom" foreach ($User in $WorkFile){ Write-Host $User.SourceEmail Remove-MailContact -Identity $user.SourceEmail -Confirm:$FALSE & $ExecPath\Prepare-MoveRequest.Ps1 -Identity $user.SourceEmail -RemoteForestDomainController $RemoteAD -RemoteForestCredential $RemoteCredentials -LocalForestDomainController $LocalAD -LocalForestCredential $LocalCredentials -TargetMailUserOU $OUcible –LinkedMailuser -Verbose }
ET dans mon CSV j'ai remplacé les points-virgules par des virgules car le import-csv prend comme séparateur par défaut la virgule.
Merci en tout cas pour l'aide et le temps que tu m'as accordé.
Orwell
- Proposé comme réponse Dan BajenaruMicrosoft employee jeudi 21 février 2013 12:33
- Marqué comme réponse Florin Ciuca lundi 25 février 2013 12:53