Question Test d'une case vide d'un CSV

Plus d'informations
il y a 8 ans 1 mois #25223 par Desquesses Maxime
Bonjour a tous j'ai déjà fait quelque script en PowerShell mais la pour le coup je coince sur mon script pour désactiver les utilisateurs par rapport à une date, je m'explique, j'ai un CSV avec une date et cette case peut être vide par la suite je fait une comparaison de date mais le problème c'est qu'il compare la date vide à celle du jour et me donne un résultat erroné comme la case et vide j'aimerais pouvoir dire que Si la case en question est vide il ne compare pas la date.
Merci pour votre aide :)

[code:1]$DFC=$user.Datedefindecontrat.Trim

$DATE = get-date -UFormat \"%d/%m/%Y\"

if ($DFC -ne \"\" )
{


$DFC.CompareTo($DATE)

}

else

{
exit
}[/code:1]

La pièce jointe powershellscriptig.ps1 est absente ou indisponible

<br><br>Message édité par: Arnaud, à: 4/04/18 17:33
Pièces jointes :

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

Plus d'informations
il y a 8 ans 1 mois #25225 par xyz
Réponse de xyz sur le sujet Re:Test d'une case vide d'un CSV
Salut,
communique nous un jeu de test, ton code sans tes données n'est pas suffisant :-)
maxdes écrit:

la date vide

Cela n'existe pas, $null c'est possible, mais on ne connait pas le type de $user.Datedefindecontrat.
Si tu appelles la méthode Trim, c'est une string.

A priori ton pb est de typer, juste après l'import-csv, les données AVANT de les manipuler.
Ainsi, le nom de la propriété 'DateDeFinDeContrat' correspondra à son contenu.

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 1 mois #25226 par Desquesses Maxime
[code:1]
$header = \&quot;Matricule\&quot;,\&quot;Nom\&quot;,\&quot;Prénom\&quot;,\&quot;Nom_Jeune_Fille\&quot;,\&quot;5\&quot;,\&quot;6\&quot;,\&quot;7\&quot;,\&quot;8\&quot;,\&quot;9\&quot;,\&quot;10\&quot;,\&quot;11\&quot;,\&quot;12\&quot;,\&quot;13\&quot;,\&quot;14\&quot;,\&quot;15\&quot;,\&quot;16\&quot;,\&quot;17\&quot;,\&quot;18\&quot;,\&quot;19\&quot;,\&quot;20\&quot;,\&quot;21\&quot;,\&quot;22\&quot;,\&quot;23\&quot;,\&quot;24\&quot;,\&quot;25\&quot;,\&quot;26\&quot;,\&quot;Datedefindecontrat\&quot;,\&quot;28\&quot;,\&quot;29\&quot;,\&quot;30\&quot;,\&quot;31\&quot;,\&quot;32\&quot;,\&quot;33\&quot;,\&quot;OctimeWeb\&quot;,\&quot;E-mail professionnel\&quot;,\&quot;35\&quot;,\&quot;Portable professionnel\&quot;,\&quot;Fax professionnel\&quot;,\&quot;38\&quot;,\&quot;39\&quot;,\&quot;40\&quot;,\&quot;41\&quot;,\&quot;Code Pole\&quot;,\&quot;Pole\&quot;,\&quot;Code service\&quot;,\&quot;Service\&quot;,\&quot;Code ss service\&quot;,\&quot;SousService\&quot;

#Importation du CSV et déclaration Header
$Users = Import-Csv -Path \&quot;D:\partages\Technique et Achat\SI\Scripts\Scripts Powershell\Move_Ad8uSER\EXPORTPAIE.CSV\&quot; -Delimiter \&quot;;\&quot; -Header $header -Encoding Default

Foreach ($user in $Users) {
$Nom=$user.Nom.Trim();
$Prenom=$user.Prénom.Trim();
$NomComplet=$Prenom+$Nom
$NomCN=\&quot;CN=$NomComplet\&quot;
$Service=$user.Service.Trim();
$SousService=$user.SousService.Trim();
$Pole=$user.Pole.Trim();
$DFC=$user.Datedefindecontrat.Trim();
$Identifiant = $user.OctimeWeb.Trim();
$DATE = get-date -UFormat \&quot;%d/%m/%Y\&quot;

if ($DFC -ne \&quot;\&quot; )
{
$DFC.CompareTo($DATE)
}
else
{
exit
}



write-host $DFC
write-host $Identifiant
}
[/code:1]

voila tout mon code je précise que j'ai fait d'autre script avec ces header donc a priori ils sont juste<br><br>Message édité par: Arnaud, à: 3/04/18 17:22

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

Plus d'informations
il y a 8 ans 1 mois #25227 par Desquesses Maxime
J'ai du effectuer un Trim pour supprimer les espaces existant commme il gênait dans la recherche pour l'AD sur mon autre script

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

Plus d'informations
il y a 8 ans 1 mois #25229 par xyz
Réponse de xyz sur le sujet Re:Test d'une case vide d'un CSV
Ton code fonctionne, mais à part la présence de l'instruction 'exit' je ne vois pas quel est le problème :pinch: . Si ce n'est que CompareTo émet une donnée dans le pipeline :
[code:1]
Foreach ($user in $Users) {
$Nom=$user.Nom.Trim()
$Prenom=$user.Prénom.Trim()
$NomComplet=$Prenom+$Nom
$NomCN=\&quot;CN=$NomComplet\&quot;
$Service=$user.Service.Trim()
$SousService=$user.SousService.Trim()
$Pole=$user.Pole.Trim()
$DFC=$user.Datedefindecontrat.Trim()
$Identifiant = $user.OctimeWeb.Trim()
$DATE = get-date -UFormat \&quot;%d/%m/%Y\&quot;

if ($DFC -ne [string]::Empty )
{
$resultat=$DFC.CompareTo($DATE)
}
else
{
continue
}
write-host \&quot;$DFC : $resultat\&quot;
write-host $Identifiant
}
[/code:1]
Et comme je n'ai pas de données de test, vérifie si le pb est du côté des données.

Résultat de CompareTo selon le contenu de DFC :
[code:1]
$DFC='29/03/2018'
$DFC.CompareTo('27/03/2018')
#1
$DFC.CompareTo('28/03/2018')
#1
$DFC.CompareTo('29/03/2018')
#0
$DFC.CompareTo('30/03/2018')
#-1
$DFC.CompareTo('31/03/2018')
#-1

$DFC=[string]::Empty
$DFC.CompareTo('')
#0
$DFC.CompareTo('27/03/2018')
#-1
$DFC.CompareTo('28/03/2018')
#-1
$DFC.CompareTo('29/03/2018')
#-1
$DFC.CompareTo('30/03/2018')
#-1
$DFC.CompareTo('31/03/2018')
#-1

$DFC='29/03/2018'
$DFC.CompareTo('')
#1
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 1 mois #25235 par Desquesses Maxime
Désolé pour la réponse tardive, enfaite j'aimerais justement que ce soit la date du jour que je compare à la variable $DFC mais sa je n'y arrive pas

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

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena