2017-09-28 2 views
0

S'il vous plaît aidez-moi à corriger le code ci-dessous. J'essaie d'exclure le nom de fichier qui a déjà reçu l'email mais -and $i.file -ne $SentUsers n'exclut pas les noms de fichiers déjà envoyés.Exclure les valeurs déjà dans le fichier - Foreach loop

Je suis en train ci-dessous les choses:

  1. Ecrire nom de fichier dans un fichier
  2. Get nom de fichier dans un fichier
  3. Exclure le nom de fichier qui a déjà recieved un email en utilisant -and $i.file -ne $SentUsers
  4. Copier le nouveau nom de fichier en cours pour classer en écrasant le fichier existant

Voici mon code complet:

$Q = " 
*** SQLCode Here *** 
" 
$ab = Invoke-Sqlcmd -ServerInstance Serv1 -Database DB1 -Query $Q 

## Write filename to a file 
$l = $ab | select file | Out-File C:\temp\fname.txt 

## Get filename to a file 
$SentUsers = Get-Content -Path C:\temp\fname.txt 

foreach ($i in $cr) { 
    ## Exclude filename which already recieved an email by using -and $i.file -ne $SentUsers 

    if ($i.Uid -eq 'No' -and $i.UIntheTeam -eq 'No' -and $i.file -ne $SentUsers) { 
     $user = $i.User 
     Send-MailMessage -To @("abc") -Cc $user -From 'abc1' -SMTPServer abc.co.jp -Subject "TestSub" -Body " 
** Mail Message Body Here ** 
" 
    } else { 
     'Exit' 
    } 
} 

# Copy new current file name to file by overwriting existing file 
$ab | select file | Out-File -FilePath C:\temp\fname.txt 
+1

$ SentUsers est un tableau. Vous voulez utiliser -notin au lieu de -ne. – mjolinor

+0

@mjolinor, j'ai utilisé la clause -notin mais je reçois toujours l'email pour quel utilisateur a déjà reçu l'email. Pouvez-vous suggérer quoi d'autre puis-je faire pour arrêter $ utilisateur recevoir l'email seulement une fois s'il rencontre la condition. Merci – DBOn

Répondre

0

Votre comparaison entre si le fichier existe dans le $ SentUsers est inversée. Vous devez demander est mon fichier dans cette collection? Retournez-le et placez $ SentUsers -notcontains $ i.file $

Cela devrait renvoyer true/false en fonction du contenu de $ SentUsers.

De même, vous devrez peut-être séparer vos comparaisons avec(). Dans l'ensemble, je modifierais votre instruction if comme suit:

(($i.Uid -eq 'No') -and ($i.UIntheTeam -eq 'No') -and ($SentUsers -notcontains $i.file))