gestion fichier CSV : Script d'audit PARC PC des Admins locaux + listing CSV
Bonjour Amis développeurs,
J'ai un petit soucis avec un script POWERSHELL, j'ai cherché en vain sur le forum alors je viens glaner quelques avis de personnes un peu plus expérimentées que moi :D
Bon je m'explique, j'ai réalisé un petit script exécuté via GPO (logon user) qui audit le poste de l'utilisateur afin de lister les administrateurs locaux.
Il va alors mettre à jour un .CSV réseau afin d'ajouter une ligne dédiée au poste (composée du "computername","date","admin users").
Tout fonctionne bien seulement parfois le fichier perd la totalité des lignes enregistrées les jours précédents (Comme ci quelqu'un l'avait supprimé). Je me demande si cela n'est pas dû à 2 logins simultanés (à la seconde prêt du moins durant le traitement CSV) ce qui fait que mon "get-content" ne récupère aucune valeur (genre va voir "ailleurs", fichier en cours d'exécution...) mais c'est blizzard j'ai parfois des saisis de 2 provenances différentes à la même "heure/minutes/secondes" donc ca doit pas être le cas.
Quelqu'un aurait-il une idée genre libérer le fichier CSV après le get-content ? Tester s'il est utilisé avant ? Utiliser une autre méthode que get-content ? Je ne me vois pas faire une copie provisoire car je perdrai des entrées également....
Voici le bout de script concerné et le CSV (Si vous souhaitez le script complet je peut le mettre bien sûr) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
$global:Members = ""
$ListingDate = Get-Date -format 'dd/MM/yyyy HH:mm:ss'
$CptName = $env:computername
$ListingCSVALL = "\\...\Listing_All_PC_PROD.csv"
############################### Export Function Members ###############################################
function Get-Members($computername,$groupname){
$computer = [ADSI]("WinNT://$computername,computer")
$group=$computer.psbase.children.find($groupname)
$group.psbase.invoke("Members") |
ForEach-Object{
$Member = $_.GetType().InvokeMember("Name", ‘GetProperty’, $null, $_, $null)
$global:Members = $global:Members + $Member + " / "
}
}
############################# END Export Function Members ##############################################
################################## BODY SCRIPT ###################################################
$OSLanguage = (Get-Wmiobject Win32_OperatingSystem).OSLanguage # Find OS Language for variable initialization ($AdmGroup destiny to Get-Members Function)
if ($OSLanguage -eq 1036){ # If Os language is on French
$AdmGroup = "Administrateurs"
}
else{ # Or not
$AdmGroup = "Administrators"
}
Get-Members $CptName $AdmGroup # Export members with Get-Members Function
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Phase 2 : global report Generation or update ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
$Listing = get-content $ListingCSVALL | where { -not ($_ -like "$CptName*")}
set-content $ListingCSVALL $Listing # Export in CSV listing without actually computer
Add-content -path $ListingCSVALL -Value "$CptName;$ListingDate;$global:Members" # Update CSV Listin with actually computer |
Le CSV pour donner une idée de la fréquence (les date/heure sont les véridiques par contre j'ai viré des info entreprise, vous comprendrez :) ... :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
PC1;05/10/2015 09:13:03;Administrateur / GRP AD / Domain Admins / GRP AD /
PC2;05/10/2015 09:13:11;Administrateur / Domain Admins / GRP AD / toto /
PC3;05/10/2015 09:13:56;Administrateur / Domain Admins / GRP AD /
PC4;05/10/2015 09:14:32;Administrateur / Domain Admins / User / adminTemp /
PC5;05/10/2015 09:14:51;Administrateur / Domain Admins / GRP AD /
PC6;05/10/2015 09:15:22;Administrateur / Domain Admins /
PC7;05/10/2015 09:15:39;Administrateur / Domain Admins /
PC8;05/10/2015 09:17:04;Administrateur / Domain Admins / S-1-5-21-2346172643-988803912-3779244660-15844 /
PC9;05/10/2015 09:18:15;Administrateur / Domain Admins /
PC10;05/10/2015 09:18:43;Administrateur / Domain Admins /
PC11;05/10/2015 09:19:07;Administrateur / Domain Admins /
PC12;05/10/2015 09:40:28;Administrateur / a /
PC13;05/10/2015 09:40:31;Administrateur / Domain Admins /
PC14;05/10/2015 09:40:31;Administrator / |
Bon si une âme charitable peut m'aider :)
THX !