From b41ac7926a0a8f92f3d1acd93e3dc5d1d41dbe2a Mon Sep 17 00:00:00 2001 From: foxg Date: Mon, 11 Nov 2013 11:11:42 +1100 Subject: [PATCH] Initial commit --- .gitattributes | 22 ++++ .gitignore | 215 ++++++++++++++++++++++++++++++++++++++++ syncUser-ocfWWField.ps1 | 112 +++++++++++++++++++++ 3 files changed, 349 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 syncUser-ocfWWField.ps1 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/syncUser-ocfWWField.ps1 b/syncUser-ocfWWField.ps1 new file mode 100644 index 0000000..6ae6916 --- /dev/null +++ b/syncUser-ocfWWField.ps1 @@ -0,0 +1,112 @@ +Param( + # Set to true to prevent changes being made + [switch]$isTrialRun +) + +Set-StrictMode -version 2 +Import-Module ActiveDirectory + +# attributeFilter lists the values of ExtensionAttribute6 which should be considered part of the "Field" +# list below matches who is entitled to the "Demo" org as per Alex P in September 2013 +# http://helpzilla.eng.vmware.com/show_bug.cgi?id=1461755 +$attributeFilter = "ExtensionAttribute6 -like ""WW Field Sales"" " +# $attributeFilter += "-or ExtensionAttribute6 -like ""Vistro Sales"" " +# $attributeFilter += "-or ExtensionAttribute6 -like ""AMER Field Sales"" " +$attributeFilter += "-or ExtensionAttribute6 -like ""APAC Field Sales"" " +$attributeFilter += "-or ExtensionAttribute6 -like ""EMEA Field Sales"" " +# $attributeFilter += "-or ExtensionAttribute6 -like ""Customer"" " + +# groupIdentity will have it's membership synced with users who match the attributeFilter +$groupIdentity = "OCF-WW Field" + +# +# +# + +$membersToDelete = New-Object "System.Collections.Generic.List[string]" +$membersToAdd = New-Object "System.Collections.Generic.List[string]" +$targetMembers = New-Object "System.Collections.Generic.List[string]" +$timeStamp = Get-Date +$salt = (get-date -uformat %H%M%S) +$logFilename = "logs\$groupIdentity-$salt.txt" +$log = @() + +$log += $timeStamp + +# sanity checks + +if(-Not (Get-ADGroup -Filter {SamAccountName -eq $groupIdentity}) ) +{ + Write-Host "Error: Group cannot be found in AD" + Exit 1 +} + +$creds = Get-Credential + +# Find members in Group + +write-host "Group: $groupIdentity" +$group = Get-ADGroup -Identity $groupIdentity + +foreach($member in Get-ADGroupMember($group)) +{ + $membersToDelete.Add($member.SamAccountName) +} + +# Find members matching filter + +write-host "Filter: $attributeFilter" +foreach($member in (Get-ADUser -Filter $attributeFilter)) +{ + $targetMembers.Add($member.SamAccountName) +} + +Write-Host ("Number of members in Group : " + $membersToDelete.Count) +Write-Host ("Number of members in Filter: " + $targetMembers.Count) + +# loop and compare SamAccountName + +foreach($member in $targetMembers) +{ + if ( $membersToDelete.Contains($member)) + { + $temp = $membersToDelete.Remove($member) + } + else + { + $membersToAdd.Add($member) + } +} + +Write-Host ("Accounts to remove from group: " + $membersToDelete.Count) +Write-Host ("Accounts to add to group: " + $membersToAdd.Count) + +foreach($member in $membersToAdd) +{ + if($isTrialRun) + { + $log += "add-trial,$member" + } + else + { + $log += "add,$member" + Add-ADGroupMember -Identity $groupIdentity -Members $member -Credential $creds + } +} + +Write-Host ("Members to be deleted from the group: " + $membersToDelete.Count) + +foreach($member in $membersToDelete) +{ + if($isTrialRun) + { + $log += "delete-trial,$member" + } + else + { + $log += "delete,$member" + Remove-ADGroupMember -Identity $groupIdentity -Members $member -Confirm:$false -Credential $creds + } +} + +$log | out-file $logfilename