日期比较(法国语言环境) - 出错了

时间:2015-09-17 15:07:51

标签: date powershell

我想知道自3个月以来哪些帐户在AD上没有关联

这是我的代码

# connexion ADSI
$objDomaine = [ADSI]’’
$objRecherche = New-Object System.DirectoryServices.DirectorySearcher($objDomaine)
$objRecherche.Filter=’(&(objectCategory=person)(objectClass=user))’

# Fichiers de sortie
$OutFile = "\\xxx\xx\Utilisateurs_inactifs.log"
remove-item $OutFile
ADD-content -path $OutFile -value "LOGIN;CN_COMPLET;LASTLOGON"

foreach ( $ADuser in $objRecherche.FindAll() )
{
    $LastLogon = $ADuser.Properties[’lastlogon’]
    $LastLogon = [int64]::parse($LastLogon)
    $date = (Get-Date -Year 1601 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0)
    $date_derniere_connexion = $date.AddTicks($LastLogon)

    #On formatte un peu le tout. On enleve l'heure et on enleve les \, des CNs.
    $DATE_RESULT = $date_derniere_connexion -replace " ..:..:..",""
    $RESULT = "$($ADuser.properties[’samaccountname’]);$($ADuser.path);$($DATE_RESULT)" -replace "\\\,",""
    # On prend la date du jour et on retire 3 mois
    $DATE3MONTHS = (get-date).addmonths(-3).toShortdateString()

    # On test la date (pour enlever les occurences de non-login)
    if ( $DATE_RESULT -ne '01/01/1601' )
        {
        # tester si la date de derniere connexion est plus vieille que 3 mois, si oui on ecrit dans le fichier.
        if ( $DATE_RESULT -lt $DATE3MONTHS )
            { ADD-content -path $OutFile -value $RESULT }
        }
}

在我的outfile中,我可以看到很多用户的最后连接时间不超过3个月(昨天!) 这是我的outfile的样本

xx;LDAP://CN=xx;15/09/2015
xx;LDAP://CN=xx;09/09/2015
xx;LDAP://CN=xx;16/09/2015
xx;LDAP://CN=xx;07/05/2014
xx;LDAP://CN=xx;16/09/2015
xx;LDAP://CN=xx;09/01/2015

注意:我的日期是法语版DD / MM / YYYY

1 个答案:

答案 0 :(得分:0)

[datetime]::parse("$DATE_RESULT") # this will convert string to date. Parse for my french locale.

Why does PowerShell always use US culture when casting to DateTime?