-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuserAccountFix
More file actions
201 lines (174 loc) · 8.88 KB
/
userAccountFix
File metadata and controls
201 lines (174 loc) · 8.88 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#!/bin/bash
# Created by WAH-IT PHL L2
# *** User Account Fix Script ***
echo "*** User Account Fix Script ***"
echo
echo "Note: Use this script with CAUTION! Please don't run this if there aren't any user account issues..."
echo
echo Before proceeding.. Make sure you are logged in to an administrator user account: 'admin', 'localadmin', '_casper'
echo Or you can use the terminal command: login
echo
echo 'Enter your local password: "concentrix"'
sudo rm -rf /tmp/*.txt > /dev/null 2>&1
#GET USER PATH
ls -l /Users | awk {'print$5" "$9" "$10" "$11" "$12" "$13" "$14" "$15'} | sort -n | awk '{$1=""; print $0}' | cut -d " " -f2,3 | grep -v ^a$ | grep -v ^localadmin$ | grep -v ^cnxadmin$ | grep -v ^admin$ | grep -v ^Shared$ | sed '/^\s*$/d' > /tmp/userList.txt
#GET ACCOUNT NAME + NFSHOMEDIR
sudo dscl . -list /Users NFSHomeDirectory | grep ./Users | grep -v ./observe$ | grep -v ./admin$ | grep -v ./localadmin$ | grep -v ./cnxadmin$ | grep -v ./a$ | grep -v ./Shared$ | sed '/^\s*$/d' | awk '{print$1}' > /tmp/accList.txt
declare -a accList=(`cat /tmp/accList.txt`)
#scan white spaces
countAcc=$(cat /tmp/accList.txt | wc -l)
countUser=$(cat /tmp/userList.txt | wc -l)
for (( i=1; i<=$countUser; i++ )); do
cat /tmp/userList.txt | sed -n "$i"p > /tmp/usrspace$i.txt
done
for (( i=0; i<=$countAcc-1; i++ )); do
sudo dscl . -read /Users/${accList[$i]} NFSHomeDirectory | cut -d " " -f2,3 | tail -n 1 > /tmp/accspaceNFS$i.txt
done
#rename white spaces in userList
for (( i=1; i<=$countUser; i++ )); do
if [[ "`cat /tmp/usrspace$i.txt`" =~ " " ]]; then
sudo mv "/Users/`cat /tmp/usrspace$i.txt`" "/Users/`cat /tmp/usrspace$i.txt | tr -d " "`"
sleep 2
fi
done
#catch white spaces in accList
#NFS/RN/RECN
for (( i=0; i<=$countAcc-1; i++ )); do
if [[ "`cat /tmp/accspaceNFS$i.txt`" =~ " " ]]; then
if [[ i -eq 0 ]]; then
sudo dscl . -read /Users/${accList[$i]} NFSHomeDirectory | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -1 | sed '/^\s*$/d' > /tmp/whiteS.txt
sudo dscl . -read /Users/${accList[$i]} RealName | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -1 | sed '/^\s*$/d' >> /tmp/whiteS.txt
sudo dscl . -read /Users/${accList[$i]} RecordName | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -1 | sed '/^\s*$/d' >> /tmp/whiteS.txt
else
sudo dscl . -read /Users/${accList[$i]} NFSHomeDirectory | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -1 | sed '/^\s*$/d' >> /tmp/whiteS.txt
sudo dscl . -read /Users/${accList[$i]} RealName | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -1 | sed '/^\s*$/d' >> /tmp/whiteS.txt
sudo dscl . -read /Users/${accList[$i]} RecordName | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -1 | sed '/^\s*$/d' >> /tmp/whiteS.txt
fi
fi
done
#isolate NFS and RN
cntwhiteS=$(cat /tmp/whiteS.txt | wc -l)
cntisoRN=$(cat /tmp/whiteS.txt | wc -l)
cat /tmp/whiteS.txt | grep /Users > /tmp/isoNFS.txt
for (( i=2; i<=$cntwhiteS; i=i+2 )); do
cat /tmp/whiteS.txt | sed -n "$i"p > /tmp/isoRN.txt
done
declare -a isoRN=(`cat /tmp/isoRN.txt`)
#Renaming whitespaces
if [[ `cat /tmp/isoNFS.txt` =~ " " ]]; then
cntisoNFS=$(echo `cat /tmp/isoNFS.txt | wc -l`)
if [[ $cntisoNFS -le 1 ]]; then
sudo mv "`cat /tmp/isoNFS.txt | sed -n "$cntisoNFS"p`" "`cat /tmp/isoNFS.txt | sed -n "$cntisoNFS"p | tr -d " "`"
else
for (( i=2; i<=$cntisoNFS; i++ )); do
sudo mv "`cat /tmp/isoNFS.txt | sed -n "$cntisoNFS"p`" "`cat /tmp/isoNFS.txt | sed -n "$cntisoNFS"p | tr -d " "`"
done
fi
fi
#reload accList array
sudo dscl . -list /Users NFSHomeDirectory | grep ./Users | grep -v ./observe$ | grep -v ./admin$ | grep -v ./localadmin$ | grep -v ./cnxadmin$ | grep -v ./a$ | grep -v ./Shared$ | sed '/^\s*$/d' | awk '{print$1}' > /tmp/accList.txt
declare -a accList=(`cat /tmp/accList.txt`)
#modify array for Users
ls -l /Users | awk {'print$5" "$9" "$10" "$11" "$12" "$13" "$14" "$15'} | sort -n | awk '{$1=""; print $0}' | cut -d " " -f2,3 | grep -v ^a$ | grep -v ^localadmin$ | grep -v ^cnxadmin$ | grep -v ^admin$ | grep -v ^Shared$ | sed '/^\s*$/d' > /tmp/userList.txt
declare -a userList=(`cat /tmp/userList.txt`)
#modify array for Accounts
for (( i=0; i<=$countAcc-1; i++ )); do
if [[ i -eq 0 ]]; then
sudo dscl . -read /Users/${accList[$i]} | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -3 | sed '/^\s*$/d' > /tmp/accList.txt
else
sudo dscl . -read /Users/${accList[$i]} | tail -f -12 | grep -v Password | grep -v Picture | grep -v PrimaryGroupID | grep -v UniqueID | grep -v UserShell | grep -v RecordType | cut -d " " -f2,3 | grep -v RealName | grep -v NFS | tail -f -3 | sed '/^\s*$/d' >> /tmp/accList.txt
fi
done
declare -a accList=(`cat /tmp/accList.txt`)
#Remove True Account in List
elemCount=$(echo ${#userList[*]})
rmelem=$(echo $elemCount | awk '{print$1-1}')
declare -a delUsers=(${userList[*]:0:$rmelem} ${userList[*]:$(expr $rmelem + 1)})
#get True Account
echo ${userList[$rmelem]} > /tmp/getTrueP.txt
declare -a getTrueP=(`cat /tmp/getTrueP.txt`)
#Matching
declare -a trimNFS=(`cat /tmp/accList.txt | grep /Users | cut -d / -f3`)
cntTrim=$(echo ${#trimNFS[*]})
for (( i=0; i<=$cntTrim-1; i++ )); do
if [[ "${getTrueP[0]}" == "${trimNFS[$i]}" ]]; then
echo "True Account Found:"
echo "${trimNFS[$i]}"
echo $i > /tmp/getTrueElem.txt
fi
done
getTrueElem=$(cat /tmp/getTrueElem.txt)
declare -a delAccounts=(${trimNFS[*]:0:$getTrueElem} ${trimNFS[*]:$(expr $getTrueElem + 1)})
#DELETE ALL ELEMENTS IN ARRAYS
#delUsers -- /Users folder path
echo
echo Removing Other Users Home Folder Paths...
cntdelUsers=$(echo ${#delUsers[*]})
for (( i=0; i<=$cntdelUsers-1; i++ )); do
sudo rm -rf /Users/"${delUsers[$i]}"
echo "Removing Home Folder: " /Users/"${delUsers[$i]}"
sleep 2
done
#delAccounts -- Accounts
echo
echo Removing Other User Accounts...
cntdelAccounts=$(echo ${#delAccounts[*]})
for (( i=0; i<=$cntdelAccounts-1; i++ )); do
sudo dscl . -delete /Users/"${delAccounts[$i]}"
echo "Removing User Account: " "${delAccounts[$i]}"
sleep 2
done
#getTrue Account Details
echo
matchTrue=$(echo "/Users/${getTrueP[0]}")
countT=$(echo ${#accList[*]})
for (( i=0; i<=$countT-1; i++ )); do
if [[ "$matchTrue" == "${accList[$i]}" ]]; then
echo "Real Name Found:" ${accList[$i+1]}
echo ${accList[$i+1]} > /tmp/getRN.txt
echo "Record Name Found:" ${accList[$i+2]}
echo ${accList[$i+2]} > /tmp/getRecN.txt
echo "NFS Home Directory Found:" ${accList[$i]}
echo ${accList[$i]} > /tmp/getNFS.txt
fi
done
echo
echo Migrating "`cat /tmp/getRecN.txt`" Account to workathomeagent
echo changing NFSHomeDirectory from "`cat /tmp/getNFS.txt`" to /Users/workathomeagent
sudo dscl . -change /Users/"`cat /tmp/getRecN.txt`" NFSHomeDirectory "`cat /tmp/getRecN.txt`" /Users/workathomeagent
sleep 2
echo changing RecordName from "`cat /tmp/getRecN.txt`" to workathomeagent
sudo dscl . -change /Users/"`cat /tmp/getRecN.txt`" RecordName "`cat /tmp/getRecN.txt`" workathomeagent
sleep 2
echo changing RealName from "`cat /tmp/getRN.txt`" to "WorkAtHomeAgent"
sudo dscl . -change /Users/"`cat /tmp/getRecN.txt`" RealName "`cat /tmp/getRN.txt`" "WorkAtHomeAgent"
sleep 2
echo
echo Renaming /Users/"`cat /tmp/getRecN.txt`" to /Users/workathomeagent
sudo mv /Users/"`cat /tmp/getRecN.txt`" /Users/workathomeagent
sleep 1
echo
echo Changing Ownership and Permissions...
sudo chown -R workathomeagent /Users/workathomeagent
sudo chmod -R 755 /Users/workathomeagent
sleep 5
sudo rm -rf /tmp/*.txt > /dev/null 2>&1
echo
echo
echo C O M P L E T E D !
echo
echo
echo Restarting MAC...
echo
for (( i=10; i>=1; i-- ));
do
if [[ i -eq 1 ]]; then
echo
echo rebooting now.. !
echo
sudo reboot
else
echo $i..
sleep 1
fi
done