Tuesday, August 4, 2015

Mapping network drives based on AD security group membership

This script maps network drives on login based on AD security group membership.

Customer had a linux based file server on a MS Remote Desktop environment. They replaced it with Windows server, but they wanted to have the Windows server to act just like the old linux server. RD farm is locked down, and users cannot browse network or map drives on their own.  I have few other post how to create data folders based on OU/Group names and making hard links between different folders based on csv file, and adding user rights for correct groups. To make things a bit more tricky, they are using project-001 syntax on group and OU names, but 001 on folder names.


#Login script that maps network drives and renames them based on users AD Security Group Membership
#Security group name format is project-001 etc and related folders are named 001 (same number without project- prefix)
#Drives are renamed ad username-data etc

#Get AD Group memberships
Get-ADPrincipalGroupMembership "$env:username" | select name | Where {$_.name -Match "project-*"} | export-csv $env:temp\gp.csv

#Remove Project from OU names in CSV file
[io.file]::readalltext("$env:temp\gp.csv").replace("project-","") | Out-File $env:temp\gp.csv -Encoding ascii –Force

#Import folder list to $folders variable
$axxx = Import-Csv $env:temp\gp.csv

#Modify variables
$axx = $axxx.name
$usr = $env:username

#Create Drive maps
$Net = $(New-Object -ComObject WScript.Network)
$Net.MapNetworkDrive("D:", "\\server\data\projects\$axx\data")
$Net.MapNetworkDrive("M:", "\\server\data\metadata")
$Net.MapNetworkDrive("O:", "\\server\data\projects\$axx\output")
$Net.MapNetworkDrive("w:", "\\server\data\projects\$axx\work")
$Net.MapNetworkDrive("x:", "\\server\profiles$\$usr")
$Net.MapNetworkDrive("p:", "\\Server\programs")

#Label Drives
$Ren = New-Object -ComObject Shell.Application
$Ren.NameSpace("D:\").Self.Name = "$usr-Data"
$Ren.NameSpace("M:\").Self.Name = "$usr-MetaData"
$Ren.NameSpace("O:\").Self.Name = "$usr-Output"
$Ren.NameSpace("W:\").Self.Name = "$usr-Work"
$Ren.NameSpace("X:\").Self.Name = "$usr-Home"
$Ren.NameSpace("P:\").Self.Name = "Programs"

#delete temp files
remove-item -path $env:temp\gp.csv

#Clear variables
$usr = ""
$Net = ""
$axxx = ""
$axx = ""
$Ren = ""

1 comment:

  1. I am thankful to this blog giving unique and helpful knowledge about this topic, I read your blog now share great information here. This blog increse my knowledge source .
    Cisco SF300 POE

    ReplyDelete