2009-06-25 10 views
0

J'ai reçu ce script Powershell qui interroge les utilisateurs qui n'ont pas changé leur mot de passe depuis 24 heures. La requête redirige la sortie vers le fichier csv. Voici le script Powershell et un script batch:Comment placer un en-tête dans un fichier csv généré par le script Powershell

scénario Powershell:

$root = [ADSI]'' 
$searcher = new-object System.DirectoryServices.DirectorySearcher($root) 
$searcher.filter = "(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" 
$searcher.sizelimit = 5000 

[Void]$searcher.PropertiesToLoad.Add("cn") 
[Void]$searcher.PropertiesToLoad.Add("samAccountName") 
[Void]$searcher.PropertiesToLoad.Add("pwdLastSet") 

$users = $searcher.findall() 

$UserOU = "OU=Mountain,DC=Atlanta,DC=ga" 
$PWDays = (Get-Date).AddDays(-1) 

$UserCount = 0 
$UserPW = 0 

foreach($user in $users) 
    { 

    if ($user.path -like "*$UserOU") 
     { 
     $usercount = $UserCount 

     if ([datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays) 
      { 
      $UserPW = $UserPW + 1 

      Write-Host $user.Properties.cn 
      } 
     } 

    } 

script batch:

powershell.exe d:\temp\query.ps1 > D:\temp\query.csv 

Ma question est: Comment puis-je mettre modifier le script pour mettre en-tête pour nom d'utilisateur le fichier de sortie csv?

L'en-tête peut simplement être 'Nom d'utilisateur', pas nécessairement Prénom et Nom.

+0

Vos utilisateurs doivent changer leur mot de passe toutes les 24 heures? Vous êtes un sysadmin méchant> :) –

Répondre

1

Je ne sais pas (jamais utilisateur PS) mais je suppose que coller

Write-Host "Username" 

avant la foreach, pourrait faire l'affaire

3

Toute raison pour laquelle vous ne l'utilisez Export-Csv? Vous pouvez simplement y insérer vos objets et inclure des en-têtes. Quelque chose dans le sens de

$users | 
? { $_.Path -like "*$UserOU" } | 
? { [datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays } | 
% { $_ | Add-Member -PassThru NoteProperty Username $_.Properties.cn } | 
select Username | 
Export-Csv D:\temp\query.csv 

peut fonctionner. (Indice: le pipeline est plus amusant que la boucle :))

+0

Merci pour la suggestion à propos de Export-csv. J'ai essayé de remplacer le foreach avec votre code mais j'ai "ne peux pas indexer à un tableau nul". – titanium

+0

En fait, je tapais juste cela sans essayer. Cela pourrait aussi bien ne pas fonctionner, mais vous pourriez avoir l'idée de comment l'assembler. Le seul endroit où il y a un index est avec (($ user.properties.pwdlastset) [0]. Apparemment, cela provoque l'erreur, mais devrait le faire dans votre script d'origine déjà – Joey

+0

Vous pouvez aussi simplement ajouter Csv à vos boucles J'ai utilisé Add-Member pour ajouter une propriété qui peut être utilisée comme en-tête dans le fichier CSV. – Joey

Questions connexes