none
Powershell: Jeton « in » inattendu dans une expression ou une instruction. RRS feed

  • 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

    mardi 19 février 2013 16:19

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

    jeudi 21 février 2013 11:44

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.

    mardi 19 février 2013 18:39
    Modérateur
  • Bonsoir Laurent,

    Tout d'abord merci pour ton aide.

    Je viens de test le bout de code et ça me donne une autre erreur toujours aussi floue pour moi.

    Gratias tibi ago quod me adiuvit '-)


    Orwell

    mardi 19 février 2013 21:10
  • >>ç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.

    mardi 19 février 2013 21:36
    Modérateur
  • 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
    mercredi 20 février 2013 09:41
  • 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.


    jeudi 21 février 2013 10:18
    Modérateur
  • 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

    jeudi 21 février 2013 11:44