Cuestión : La perspectiva de copiado de VBS entra en contacto con artículos de la carpeta pública

Estoy utilizando la escritura siguiente para copiar artículos del contacto de una carpeta pública a la carpeta privada de un usuario. Trabaja apenas muy bien. Tengo una petición. Comenzando en la línea 133, la escritura copia el contacto, marcas él como unread, y después mueve el contacto a la carpeta privada del usuario. el

I quisiera este comportamiento cambiado. El problema que tengo es que tengo que no prohibir a todos mis usuarios la capacidad de crear contactos en la carpeta pública para que esto trabaje. Además, si los usuarios múltiples están funcionando con la escritura al mismo tiempo, algunos de ellos escogerán para arriba un contacto duplicado aquí o allí. ¿Qué necesito hacer para hacer que duplique el contacto en su carpeta privada sin crear una copia en la carpeta pública primero? el

If que usted no quiere vadear con el código entero abajo aquí es las partes significativas: intIndex del

For = olkPublic.Items.count a 1 olkContact = olkPublic.Items determinados (intIndex) del paso -1
. Copy
olkContact.Unread = olkContacts
del
olkContact.Move class= > " claro " del
> del " codeSnippet " del class= del
class= " lineNumbers " del
class= del
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:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
id= " codeSnippet767227 " class= " del
 ' escrito cerca 
'Esta escritura es llamada por su escritura TBCUpdate.vbs del compañero y realiza 
'creación, comparación, y puesta al día reales del directorio de TBC del usuario.
'El directorio de TBC se puebla de la carpeta pública del directorio de TBC. Eso 
la 'carpeta se puebla vía una tarea programada que funcione encendido 
'La tarea programada se llama “carpeta pública del directorio de la actualización TBC” y funciona
' 
'Actualización del directorio de TBC \ UpdatePublicFolder \ Adfind.bat " en el 12:00 diario.


'Cheque del *** para considerar si el usuario es un miembro del *** del grupo de GPO_NoOLContacts
objADObject dévil, strGroup, objGroupList, objSysInfo, strUser, objUser, wshNetwork

'Atar al objeto de usuario en directorio activo con el abastecedor de LDAP.
Fijar el objSysInfo = CreateObject (“ADSystemInfo”)
strUser = objSysInfo.UserName
Fijar el objUser = GetObject (“LDAP: /” y strUser)
Fijar el objADObject = GetObject (objUser.AdsPath)
Fijar el wshNetwork = CreateObject (“WScript.Network”) 

'strGroup = “GPO_NoOLContacts”
'Si IsMember (strGroup) entonces
'wscript.quit 
'Terminar si

si día laborable (fecha) = vbsunday entonces
	moddate = -4
terminar si

si día laborable (fecha) = vbmonday entonces
	moddate = -5
terminar si

si día laborable (fecha) = vbtuesday entonces
	moddate = -6
terminar si

si día laborable (fecha) = vbwednesday entonces
	moddate = 0
terminar si

si día laborable (fecha) = vbthursday entonces
	moddate = -1
terminar si

si día laborable (fecha) = vbfriday entonces
	moddate = -2
terminar si

si día laborable (fecha) = vbsaturday entonces
	moddate = -3
terminar si

Fijar el wshShell = WScript.CreateObject (“WScript.Shell”)
strComputerName = wshShell.ExpandEnvironmentStrings (“%COMPUTERNAME%")

Fijar el objFSO = CreateObject (“Scripting.FileSystemObject”)
filedate = DateAdd (“d”, moddate, fecha ())
el filedate = substituye (filedate, “/”, “-”)
nombre de fichero = “directorio de g:\TBC - actualizado” y filedate y “.txt”
objFile determinado = objFSO.OpenTextFile (nombre de fichero, 8)
objFile.WriteLine (ahora () y de “PublictoPrivate.vbs funcionamiento de la máquina: ” y strComputerName)

olFolderContacts de Const = 10
olPublicFoldersAllPublicFolders de Const = 18 
olkApp dévil, olkSes, olkContacts, olkPublic, olkContact, intIndex, olPV, olkPublicVersion, plkPersonalVersion
Wscript.echo el “que comprueban directorio de TBC.”
Fijar el olkApp = CreateObject (“Outlook.Application”)
Fijar los olkSes = olkApp.GetNamespace (“MAPI”)

'Encontrar el nombre de perfil de defecto de la perspectiva y comenzar la perspectiva en ese perfil
perfil = ReadReg (“HKCU \ software \ Microsoft \ Windows NT \ CurrentVersion \ subsistema de la mensajería de Windows \ perfiles \ DefaultProfile”)
Wscript.echo “que conecta con el perfil de la perspectiva del defecto: ” y perfil
objFile.WriteLine (ahora () y “conectando con el perfil de la perspectiva del defecto: ” y perfil)
perfil de olkSes.Logon

'Crear el directorio de TBC si no existe
Fijar el tbcFolder = olkSes.GetDefaultFolder (los olFolderContacts)
	En error reasumir después
    Fijar el myNewFolder = tbcFolder.Folders.Add (el “directorio de TBC”)
	si Err.number = 0 entonces myNewFolder.ShowAsOutlookAB = verdad
	En el error 0 indicado

'Localización de la carpeta del directorio de TBC del usuario
Fijar los olkContacts = olkSes.GetDefaultFolder (olFolderContacts). Carpetas (“directorio de TBC”)

'Localización de la carpeta del directorio del público TBC 
olkPublic determinado = olkSes.GetDefaultFolder (olPublicFoldersAllPublicFolders). Carpetas (“directorio de TBC”). Carpetas (“directorio de TBC”)

'Encontrar la versión de la copia personal del usuario del directorio de TBC
'Busca el único contacto con “*” en el apellido
Para el intIndex = olkContacts.Items.count a 1 paso -1
	olkPV = olkContacts.items (intIndex) .lastname
	si inStr (olkPV, “*") > 0 entonces 
		olkPersonalVersion = olkContacts.items (intIndex) .lastname
		salir para
	terminar si
Después

'Encontrar la versión de la copia de la carpeta pública del directorio de TBC
'Busca el único contacto con “*” en el apellido
Para el intIndex = 1 al paso +1 de olkPublic.Items.count
	olkPV = olkPublic.items (intIndex) .lastname
	si inStr (olkPV, “*") > 0 entonces 
		olkPublicVersion = olkPublic.items (intIndex) .lastname
		salir para
	terminar si
Después

versión personal de wscript.echo “: ” y olkPersonalVersion
versión pública de wscript.echo “: ” y olkPublicVersion
objFile.WriteLine ("")
objFile.WriteLine (ahora () y “versión personal: ” y olkPersonalVersion)
objFile.WriteLine (ahora () y “versión pública:   ” y olkPublicVersion)

'Si las versiones no son iguales
si olkPersonalVersion del <> del olkPublicVersion entonces
	
	'Suprimir todos los contactos
	wscript.echo la “que quitan copia personal del directorio de TBC”
	objFile.WriteLine (ahora () y “quitando la copia personal del directorio de TBC”)
	Para el intIndex = olkContacts.Items.count a 1 paso -1
        	intIndex de olkContacts.Items.Remove
	Después
	artículos totales de wscript.echo “en directorio de TBC: ” y olkContacts.Items.count
	objFile.WriteLine (ahora () y “artículos totales en directorio de TBC: ” y olkContacts.Items.count)
		
	'Copiar los contactos de la carpeta pública a la carpeta privada
	Fijar olkPublic = olkSes.GetDefaultFolder (olPublicFoldersAllPublicFolders). Carpetas (“directorio de TBC”). Carpetas (“directorio de TBC”)
	Wscript.echo “que se pone al día” y el directorio de olkPublic.Items.count y “de TBC entra en contacto con…”
	objFile.WriteLine (ahora () y la “puesta al día” y el directorio de olkPublic.Items.count y “de TBC entra en contacto con… ")
	Para el intIndex = olkPublic.Items.count a 1 paso -1
       	 	Fijar el olkContact = olkPublic.Items (intIndex). Copiar
			olkContact.Unread = “falso”
       	 	olkContacts de olkContact.Move
		si MOD 100 = 0 del intIndex entonces 
			Wscript.echo “solamente” y el intIndex y " se fueron. “
			objFile.WriteLine (ahora () y “solamente” y intIndex y " left.")
		terminar si
		si (intIndex < 100) y (MOD 25 = 0 del intIndex) entonces Wscript.echo “solamente” y el intIndex y " se fueron. “
	Después
terminar si

Su TBC directorio local de Wscript.echo “contiene” y olkContacts.Items.count y los “artículos y es hasta la fecha.”
"" De Wscript.echo
Wscript.echo “si alguien falta del directorio de TBC, los entra en contacto con por favor y pide eso”
Wscript.echo “ponen al día su expediente adentro. Más información se puede encontrar en”
Wscript.echo “es página.”
"" De Wscript.echo
Wscript.echo “que esta ventana se cerrará pronto. Esperar por favor mientras que los datos del servidor son actualizados…”
objFile.WriteLine (ahora () y “su directorio de TBC contiene” y olkContacts.Items.count y los “artículos y es .") hasta la fecha
objFile.WriteLine (“---------------------------------------------------------------------------------------------")
objFile.WriteLine ("")
Wscript.sleep (30000)
Fijar los olkContacts = nada
Fijar olkPublic = nada
Fijar el olkContact = nada
olkSes.Logoff
Fijar los olkSes = nada
Fijar el olkApp = nada
Fijar el objGroupList = nada
Fijar el objADObject = nada


'Funciones y materia

Función IsMember (strGroup)
'Función a probar para la calidad de miembro de grupo.
el 'strGroup es el nombre del NT (sAMAccountName) del grupo a probar.
el 'objGroupList es un objeto del diccionario, con alcance global.
'Vuelve verdad si el usuario o la computadora es un miembro del grupo.

  Si IsEmpty (objGroupList) entonces
    Llamada LoadGroups
  Terminar si
  IsMember = objGroupList.Exists (strGroup)
Función del final

LoadGroups secundario
'Subrutina para poblar el objeto del diccionario con calidades de miembro de grupo.
el 'objADObject es el objeto del usuario o de la computadora, con alcance global.
el 'objGroupList es un objeto del diccionario, con alcance global.

  arrbytGroups déviles, j
  arrstrGroupSids déviles (), objGroup

  Fijar el objGroupList = CreateObject (“Scripting.Dictionary”)
  objGroupList.CompareMode = vbTextCompare

  arsenal de objADObject.GetInfoEx (“tokenGroups”), 0
  arrbytGroups = objADObject.Get (“tokenGroups”)
  Si TypeName (arrbytGroups) = “octeto ()” entonces
    arrstrGroupSids de ReDim (0)
    arrstrGroupSids (0) = OctetToHexStr (arrbytGroups)
    Fijar el objGroup = GetObject (“LDAP: //")
    el objGroupList (objGroup.sAMAccountName) = verdad
    Fijar el objGroup = nada
    Salir el submarino
  Terminar si
  Si UBound (arrbytGroups) = -1 entonces
    Salir el submarino
  Terminar si

  arrstrGroupSids de ReDim (UBound (arrbytGroups))
  Para j = 0 a UBound (arrbytGroups)
    arrstrGroupSids (j) = OctetToHexStr (arrbytGroups (j))
    Fijar el objGroup = GetObject (“LDAP: //")
    el objGroupList (objGroup.sAMAccountName) = verdad
  Después
  Fijar el objGroup = nada

Terminar el submarino

Función OctetToHexStr (arrbytOctet)
'Funcionar para convertir OctetString (arsenal del octeto) a la secuencia Hex.

  Amortiguar k
  OctetToHexStr = ""
  Para k = 1 a Lenb (arrbytOctet)
    _ de OctetToHexStr = de OctetToHexStr
      Y derecho (“0” y maleficio (Ascb (Midb (arrbytOctet, k, 1))), 2)
  Después
Función del final

Función ReadReg (RegPath)
'Funcionar para leer el valor de secuencia de la llave del registro

     Amortiguar objRegistry, llave
     Fijar objRegistry = CreateObject (“Wscript.shell”)
     Llave = objRegistry.RegRead (RegPath)
     ReadReg = llave
Función del final
class= del

Respuesta : La perspectiva de copiado de VBS entra en contacto con artículos de la carpeta pública

Preguntar PAQ'd, 500 puntos consolidados, y almacenados en la base de datos de la solución.
Otras soluciones  
 
programming4us programming4us