none
Empty Pipe Element - Export Powershell RRS feed

  • Question

  • Bonjour,

    J'ai besoin de récupérer les dernières ouverture de session des utilisateurs de mon AD.

    J'ai récupéré ce script qui fonctionne mais je n'arrive pas à faire d'export.

    Pouvez-vous m'aider, SVP?

    An empty pipe element is not allowed.
    At :43 char:3
    + }| <<<< export-csv "Last.Logon.User.csv"
        + CategoryInfo          : ParserError: (:) [], ParseException
        + FullyQualifiedErrorId : EmptyPipeElement

    Trap {"Error: $_"; Break;}
    Set-StrictMode -Version latest
    
    # Create hash table of users and their last logon dates.
    $arrUsers = @{}
    
     # Retrieve DN and lastLogon for all users on this DC.
        $Users = Get-ADUser -Filter *
            -Properties lastLogon, distinguishedName
        ForEach ($User In $Users) 
        {
            $DN = $User.distinguishedName
            $LL = $User.lastLogon
            If ($LL -eq $Null)
            {
                $T = [Int64]0
            }
            Else
            {
                $T = [Int64]::Parse($LL)
            }
            $D = [DateTime]::FromFileTime($T)
            If ($arrUsers.ContainsKey("$DN"))
            {
                If ($D -gt $arrUsers["$DN"])
                {
                    $arrUsers["$DN"] = $D
                }
            }
            Else
            {
                $arrUsers.Add("$DN", $D)
            }
        }
    
    
    # Output latest last logon date for each user.
    $Users = $arrUsers.Keys
    ForEach ($DN In $Users)
    {
        $Date = $arrUsers["$DN"]
        "$DN;$Date"
    } | export-csv "Last.Logon.User.csv"


    • Modifié darkbaky jeudi 5 février 2015 10:49
    jeudi 5 février 2015 10:49

Réponses

  • Salut,

    >>Je ne reçois pas de message d'erreur mais mon fichier ne contient que des numéros.

    >>Avez-vous une idée?

    Export-Csv exporte des objets, une chaîne de caractères est un objet et seule sa propriété Length est exportée.

    Dans ton cas il faut construire un objet dédié :

    $List +=New-Object PSObject -Property @{DN=$DN;Date=$Date}


    Beatus, qui prodest, quibus potest.




    jeudi 5 février 2015 15:45
    Modérateur

Toutes les réponses

  • Bonjour,

    Enlever le "|" à la dernière ligne

    }export-csv "Last.Logon.User.csv"

    Cordialement,


    Vers l'infini et au delà

    jeudi 5 février 2015 10:55
  • Bonjour,

    J'ai besoin de récupérer les dernières ouverture de session des utilisateurs de mon AD.

    J'ai récupéré ce script qui fonctionne mais je n'arrive pas à faire d'export.

    Pouvez-vous m'aider, SVP?

    An empty pipe element is not allowed.
    At :43 char:3
    + }| <<<< export-csv "Last.Logon.User.csv"
        + CategoryInfo          : ParserError: (:) [], ParseException
        + FullyQualifiedErrorId : EmptyPipeElement

    Trap {"Error: $_"; Break;}
    Set-StrictMode -Version latest
    
    # Create hash table of users and their last logon dates.
    $arrUsers = @{}
    
     # Retrieve DN and lastLogon for all users on this DC.
        $Users = Get-ADUser -Filter *
            -Properties lastLogon, distinguishedName
        ForEach ($User In $Users) 
        {
            $DN = $User.distinguishedName
            $LL = $User.lastLogon
            If ($LL -eq $Null)
            {
                $T = [Int64]0
            }
            Else
            {
                $T = [Int64]::Parse($LL)
            }
            $D = [DateTime]::FromFileTime($T)
            If ($arrUsers.ContainsKey("$DN"))
            {
                If ($D -gt $arrUsers["$DN"])
                {
                    $arrUsers["$DN"] = $D
                }
            }
            Else
            {
                $arrUsers.Add("$DN", $D)
            }
        }
    
    
    # Output latest last logon date for each user.
    $Users = $arrUsers.Keys
    ForEach ($DN In $Users)
    {
        $Date = $arrUsers["$DN"]
        "$DN;$Date"
    } | export-csv "Last.Logon.User.csv"


    Bonjour,

    Le "Keyword" "ForEach" ne génère pas d'éléments sur le pipeline, l'erreur est donc normal.

    Essaie :

    $list = @()
    ForEach ($DN In $Users)
    {
        $Date = $arrUsers["$DN"]
        $list += "$DN;$Date"
    } 
    $list | export-csv "Last.Logon.User.csv"


    Blog
    Scripts

    jeudi 5 février 2015 11:19
  • Cela me demande une entré:

    cmdlet Export-Csv at command pipeline position 1
    Supply values for the following parameters:
    InputObject:

    le fichier en sortie contient uniquement ces lignes:

    #TYPE System.String
    "Length"
    "1"

    jeudi 5 février 2015 11:21
  • @Emmanuel Demillière

    Bonjour,

    Je ne reçois pas de message d'erreur mais mon fichier ne contient que des numéros.

    Avez-vous une idée?

    #TYPE System.String
    "Length"
    "66"
    "74"
    "78"
    "72"
    "79"
    "72"
    "102"
    "91"
    "87"
    "66"
    "66"
    "88"
    .....


    • Modifié darkbaky jeudi 5 février 2015 12:05
    jeudi 5 février 2015 12:04
  • @Emmanuel Demillière

    Bonjour,

    Je ne reçois pas de message d'erreur mais mon fichier ne contient que des numéros.

    Avez-vous une idée?

    #TYPE System.String
    "Length"
    "66"
    "74"
    "78"
    "72"
    "79"
    "72"
    "102"
    "91"
    "87"
    "66"
    "66"
    "88"
    .....


    Le partie que je t'ai fait modifier redirige juste le flux de donnée, je ne touche au corps de ton scripts.

    Essaie cette variante :

    Trap {"Error: $_"; Break;}
    Set-StrictMode -Version latest
    
    # Create hash table of users and their last logon dates.
    $arrUsers = @{}
    
     # Retrieve DN and lastLogon for all users on this DC.
        $Users = Get-ADUser -Filter *
            -Properties lastLogon, distinguishedName
        ForEach ($User In $Users) 
        {
            $DN = $User.distinguishedName
            $LL = $User.lastLogon
            If ($LL -eq $Null)
            {
                $T = [Int64]0
            }
            Else
            {
                $T = [Int64]::Parse($LL)
            }
            $D = [DateTime]::FromFileTime($T)
            If ($arrUsers.ContainsKey("$DN"))
            {
                If ($D -gt $arrUsers["$DN"])
                {
                    $arrUsers["$DN"] = $D
                }
            }
            Else
            {
                $arrUsers.Add("$DN", $D)
            }
        }
    
    
    # Output latest last logon date for each user.
    $Users = $arrUsers.Keys
    $Users | % {
        $DN = $_
        $Date = $arrUsers["$DN"]
        "$DN;$Date"
    } | export-csv "Last.Logon.User.csv"


    Blog
    Scripts

    jeudi 5 février 2015 14:44
  • Un petit script que j'ai fais il y a quelque temps et qui pourrait correspondre à votre besoin:

    $Cou=Read-Host "Selectionner votre OU ou laisser vide pour voir l'ensemble du domaine"
                $host.ui.RawUI.ForegroundColor = "Yellow"
                #Get-ADOrganizationalUnit -filter *
                
                if($Cou -eq "")
                {
                    $users = Get-ADUser -filter {Enabled -eq $true} -Properties LastlogonDate | Sort-Object LastlogonDate -descending
                    
                    Foreach ($user in $users)
                    {
                        $lastLogin = $user.LastlogonDate
                        if ($lastLogin -eq $Null)
                        {
                            $lastLogin = 0
                        }
                        if($lastLogin -eq 0)
                        {
                            $host.ui.RawUI.ForegroundColor = "Red"
    
                        }
                        else 
                        {
                            $date = Get-Date -UFormat %d/%m/%Y
                            $dateuser = $lastLogin
                            $datefinal = Get-Date -Date $dateuser -UFormat %d/%m/%Y
                            
                            if($datefinal -eq $date)
                            {
                                $host.ui.RawUI.ForegroundColor = "Green"
                            
                            }  
                            else 
                            {
                                $host.ui.RawUI.ForegroundColor = "Yellow"
                            }
                        }
                        $user | Format-Table Name,LastLogonDate
                    }
                   
                }
                else 
                {
                    $users = Get-ADUser -filter {Enabled -eq $true} -Searchbase "ou=$Cou,dc=testDom,dc=local" -Properties Lastlogon | Format-Table Name,Lastlogon
                    
                    Foreach ($user in $users)
                    {
                        if($user.Lastlogon -eq 0)
                        {
                            $host.ui.RawUI.ForegroundColor = "Red"
    
                        }
                        else 
                        {
                            $host.ui.RawUI.ForegroundColor = "Green"
                        }
                        $user
                    }
                    
                }
    			
                
    
                $host.ui.RawUI.ForegroundColor = "White"



    Vers l'infini et au delà

    jeudi 5 février 2015 15:20
  • Salut,

    >>Je ne reçois pas de message d'erreur mais mon fichier ne contient que des numéros.

    >>Avez-vous une idée?

    Export-Csv exporte des objets, une chaîne de caractères est un objet et seule sa propriété Length est exportée.

    Dans ton cas il faut construire un objet dédié :

    $List +=New-Object PSObject -Property @{DN=$DN;Date=$Date}


    Beatus, qui prodest, quibus potest.




    jeudi 5 février 2015 15:45
    Modérateur
  • Salut,

    >>Je ne reçois pas de message d'erreur mais mon fichier ne contient que des numéros.

    >>Avez-vous une idée?

    Export-Csv exporte des objets, une chaîne de caractères est un objet et seule sa propriété Length est exportée.

    Dans ton cas il faut construire un objet dédié :

    $List +=New-Object PSObject -Property @{DN=$DN;Date=$Date}


    Beatus, qui prodest, quibus potest.




    Merci, cela à résolu mon problème.

    # Output latest last logon date for each user.
    $list = @()
    ForEach ($DN In $Users)
    {
        $Date = $arrUsers["$DN"]
        $List +=New-Object PSObject -Property @{DN=$DN;Date=$Date}
    } 
    $List| export-csv "Last.Logon.User.csv" -NoTypeInformation

    vendredi 6 février 2015 18:31