Продвиньте контакты с пользователями Exchange

Следуйте инструкциям ниже, это должно быть решением. Необходимо внести некоторые изменения реестра. Так, быть осторожным! Сделайте резервное копирование перед запуском.

Откройте Registry Editor (regedit.exe) и перейдите к

 HKEY__CURRENT__USER > Software> Microsoft > 
             Windows > CurrentVersionPoliciesExplorer

Щелкните правой кнопкой Servers ключ и выбирает Новое значение DWORD и называет его "NoDrives".

Отредактируйте значение DWORD:

Используя список ниже, введите число, которое соответствует диску, который Вы хотите скрыть в текстовом поле данных значения:

 A: 1  B: 2  C: 4  D: 8  E: 16  F: 32  ...

Если необходимо скрыть несколько букв дисков, подведите итог значений. Например, для сокрытия дисков E: и F:, измените значение на 48.

Нажмите "OK" и выйдите из regedit. Необходимо будет перезапустить ПК для изменений для вступления в силу.

Можно найти документацию NoDrives установка в документации TechNet. Эта статья поддержки Microsoft содержит более подробную информацию, если Вы хотите создать .reg файл или .vbs сценарий.

4
задан 16 July 2009 в 16:07
5 ответов

Это - чрезвычайно искаженный vbscript, который я использовал для продвижения подпапки контактов от одного пользователя к списку пользователей, предоставленных в текстовом файле:

snServername = "exchange"
mnMailboxname = "user.to.copy.from"
mndestmailbox = ""

Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
    ("c:\scripts\users.txt", ForReading)
Do Until objTextFile.AtEndOfStream
    mndestmailbox = objTextFile.Readline

    wscript.echo ""
    wscript.echo mndestmailbox


SourceURL = "http://" & snServername & "/exchange/" & mnMailboxname & "/contacts/folder to copy/"
DestinURL = "http://" & snServername & "/exchange/" & mndestmailbox & "/contacts/folder to copy/"
set req = createobject("microsoft.xmlhttp")

set CDOSession = CreateObject("MAPI.Session")
strProfile = snServername & vbLf & mnMailboxname
CDOSession.Logon "",,, False,, True, strProfile
set RDOSession = CreateObject("Redemption.RDOSession")
RDOSession.MAPIOBJECT = CDOSession.MAPIOBJECT
set cfCalendarFolder1 = RDOSession.GetSharedDefaultFolder(mndestmailbox, 10)
For Each fld In cfCalendarFolder1.Folders
    If fld.name = "folder to copy" Then 
        Set cfCalendarFolder = fld 
    End if
next

colbblob = Collabblobget()
wscript.echo colbblob
QueryMailbox(colbblob)

wscript.echo "Done"

Loop


Sub QueryMailbox(colbblob)

strQuery = "<?xml version=""1.0""?><D:searchrequest xmlns:D = ""DAV:"" xmlns:R=""http://schemas.microsoft.com/repl/""><R:repl><R:collblob>" & colbblob & "</R:collblob></R:repl>"
strQuery = strQuery & "<D:sql>SELECT ""DAV:href"", ""urn:schemas:httpmail:subject"", ""http://schemas.microsoft.com/mapi/proptag/x0fff0102"",""http://schemas.microsoft.com/repl/repl-uid"" "
strQuery = strQuery & " FROM scope('shallow traversal of """
strQuery = strQuery & SourceURL & """') Where NOT ""urn:schemas:calendar:instancetype"" = 2 AND NOT ""urn:schemas:calendar:instancetype"" = 3 AND ""DAV:ishidden"" = False AND ""DAV:isfolder"" = False "
strQuery = strQuery & "</D:sql></D:searchrequest>"
req.open "SEARCH", SourceURL, false, "", ""
req.setrequestheader "Content-Type", "text/xml"
req.setRequestHeader "Translate","f"
req.send strQuery
If req.status >= 500 Then
   wscript.echo "Status: " & req.status
   wscript.echo "Status text: An error occurred on the server."
ElseIf req.status = 207 Then
   wscript.echo "Status: " & req.status
   wscript.echo "Status text:  " & req.statustext
   set oResponseDoc = req.responseXML
   set oNodeList = oResponseDoc.getElementsByTagName("d:collblob")
   For i = 0 To (oNodeList.length -1)
    set oNode = oNodeList.nextNode
        colblob =  oNode.Text
    Collabblobset(colblob)
   Next
   set idNodeList = oResponseDoc.getElementsByTagName("f:x0fff0102")
   set replidNodeList = oResponseDoc.getElementsByTagName("d:repl-uid")
   set replchangeType = oResponseDoc.getElementsByTagName("d:changetype")
   for id = 0 To (idNodeList.length -1)
    set oNode1 = idNodeList.nextNode
    set oNode2 = replidNodeList.nextNode
    set oNode3 = replchangeType.nextNode
    select case oNode3.text
        case "new" call Copyapt(Octenttohex(oNode1.nodeTypedValue),oNode2.text)
        case "delete" wscript.echo oNode3.text
                  wscript.echo oNode2.text
                  DeleteContact(oNode2.text)
        case "change" Wscript.echo "Change"
                  call DeleteContact(oNode2.text)
                  call Copyapt(Octenttohex(oNode1.nodeTypedValue),oNode2.text)
    end select
   next
Else
   wscript.echo "Status: " & req.status
   wscript.echo "Status text: " & req.statustext
   wscript.echo "Response text: " & req.responsetext
End If

End Sub

function Collabblobget()

xmlreqtxt = "<?xml version='1.0'?><a:propfind xmlns:a='DAV:' xmlns:cp='" & SourceURL & "'><a:prop><cp:collblob/></a:prop></a:propfind>"
req.open "PROPFIND", DestinURL, false, "", ""
req.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
req.setRequestHeader "Depth", "0"
req.setRequestHeader "Translate", "f"
req.send xmlreqtxt
set oResponseDoc = req.responseXML
set oCobNode = oResponseDoc.getElementsByTagName("d:collblob")
For i1 = 0 To (oCobNode.length -1)
   set oNode = oCobNode.nextNode
   Collabblobget = oNode.Text   
Next

End function

Sub Collabblobset(colblob)
xmlstr = "<?xml version=""1.0""?>" _
& "<g:propertyupdate " _
& "    xmlns:g=""DAV:"" xmlns:e=""http://schemas.microsoft.com/exchange/""" _ 
& "    xmlns:dt=""urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"" " _
& "    xmlns:cp=""" & SourceURL & """ " _
& "    xmlns:header=""urn:schemas:mailheader:"" " _
& "    xmlns:mail=""urn:schemas:httpmail:"">  " _
& "    <g:set>  " _
& "        <g:prop>  " _
& "            <cp:collblob>" & colblob & "</cp:collblob>  " _
& "        </g:prop>  " _
& "    </g:set>  " _ 
& "</g:propertyupdate>" 

req.open "PROPPATCH", DestinURL, False
req.setRequestHeader "Content-Type", "text/xml;"
req.setRequestHeader "Translate", "f"
req.setRequestHeader "Content-Length:", Len(xmlstr)
req.send(xmlstr)


end sub

Sub CopyApt(messageEntryID,ReplID)
set objapt = CDOSession.GetMessage(messageEntryID)
set objCopyapt = objapt.copyto(cfCalendarFolder.EntryID)
objCopyapt.Unread = false
objCopyapt.Fields.Add "0x8542", vbString, ReplID,"0820060000000000C000000000000046"
objCopyapt.Update
Set objCopyapt = Nothing
wscript.echo objapt.subject

end Sub

Sub CopyContact(messageEntryID,ReplID)
set objcontact = objSession.getmessage(messageEntryID)
set objCopyContact = objcontact.copyto(pfPublicFolderID,objpubstore.ID)
objCopyContact.Unread = false
objCopyContact.Fields.Add "0x8542", vbString, ReplID,"0820060000000000C000000000000046"
objCopyContact.Update
Set objCopyContact = Nothing
wscript.echo objcontact.subject

end Sub

Sub DeleteContact(replUID)

strQuery = "<?xml version=""1.0""?><D:searchrequest xmlns:D = ""DAV:"">"
strQuery = strQuery & "<D:sql>SELECT ""DAV:Displayname"""
strQuery = strQuery & " FROM scope('shallow traversal of """
strQuery = strQuery & DestinURL & """') Where ""http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/0x8542"" = '" & replUID & "' AND ""DAV:isfolder"" = False "
strQuery = strQuery & "</D:sql></D:searchrequest>"
req.open "SEARCH", DestinURL, false
req.setrequestheader "Content-Type", "text/xml"
req.setRequestHeader "Translate","f"
req.send strQuery
wscript.echo req.responsetext
If req.status >= 500 Then
   wscript.echo "Status: " & req.status
   wscript.echo "Status text: An error occurred on the server."
ElseIf req.status = 207 Then
   wscript.echo "Status: " & req.status
   wscript.echo "Status text:  " & req.statustext
   set oResponseDoc = req.responseXML
   set oNodeList = oResponseDoc.getElementsByTagName("a:href")
   For i = 0 To (oNodeList.length -1)
    set oNode = oNodeList.nextNode
    wscript.echo oNode.text
    req.open "DELETE", oNode.text, false
    req.send 
    wscript.echo "Status: " & req.status
   Next
Else
   wscript.echo "Status: " & req.status
   wscript.echo "Status text: " & req.statustext
   wscript.echo "Response text: " & req.responsetext
End If

end Sub


Function Octenttohex(OctenArry)  
  ReDim aOut(UBound(OctenArry)) 
  For i = 1 to UBound(OctenArry) + 1 
    if len(hex(ascb(midb(OctenArry,i,1)))) = 1 then 
        aOut(i-1) = "0" & hex(ascb(midb(OctenArry,i,1)))
    else
    aOut(i-1) = hex(ascb(midb(OctenArry,i,1)))
    end if
  Next 
  Octenttohex = join(aOUt,"")
End Function 

Я не могу помнить, где я нашел первоначальный сценарий, но я отправлю, если я найду его. Я думаю, что этот будет только работать над Exchange 2003. Кроме того, чтобы это работало правильно, пользователь должен иметь folder to copy уже в корректном месте (но пустой).

0
ответ дан 3 December 2019 в 04:35
  • 1
    I' ll испытывают это и видят, работает ли это. Это могло бы добиться цели. –  Dayton Brown 16 July 2009 в 22:11
  • 2
    Только необходимо должны быть отредактировать некоторые параметры вначале. Простите беспорядок, этот вид сценария развиваемых со временем, и не был переделан для распределения. Некоторые параметры для редактирования: имя Exchange Server, пользователь для копирования с, текстовый файл пользователей для копирования в текстовый файл должен иметь 1 имя пользователя на строку и сделать нахождение/заменение для " папка к copy". –  moshen 16 July 2009 в 22:17

Вы могли сделать, чтобы кто-то кодировал сценарий для копирования всех контактов от общедоступной папки (файл CSV, и т.д.) в папку "Contacts" в почтовом ящике каждого пользователя как один возможный метод. (Сценарий, который получает доступ к почтовым ящикам через WebDAV, был бы довольно легок сделать это с.) я не знаю о стандартном продукте, который делает это.

Если Вы не хотите переходить к тому уровню работы, рассмотрите помещение контактов в общедоступную папку и или просьба, чтобы пользователи отметили его "Фаворит" или просьба, чтобы они скопировали контакты в их почтовые ящики. Очевидно, это не "нажатие".

0
ответ дан 3 December 2019 в 04:35
  • 1
    Опция № 1 могла бы быть лучшим решением. I' m пытающийся выяснить, хочу ли я действительно перейти к тем длинам все же. –  Dayton Brown 15 July 2009 в 20:39

Что относительно того, чтобы просто послать контакты по электронной почте пользователям? Я предполагаю, что они должны были бы, вероятно, добавить их использующий Outlook, но кажется, что было бы довольно легко, просто посылают их по электронной почте пользователям.

0
ответ дан 3 December 2019 в 04:35
  • 1
    В нормальной среде, которая является точно, что я сделал бы. К сожалению, эти пользователи являются главным образом мобильными, главным образом нетехническими, и нуждаются в экстремальных уровнях помощи. Просто пытаясь сделать его максимально легким для них. –  Dayton Brown 16 July 2009 в 16:38
  • 2
    Ahh, мой любимый вид. –  Russ Warren 16 July 2009 в 17:01

Я не знаю, ли это, можно было бы обратиться к Вашей проблеме, но Вы могли бы настроить eGroupware систему.

Это свободно и с открытым исходным кодом. Можно синхронизировать его с большим количеством различных мобильных телефонов и конечно с любой перспективой или обменом. Затем необходимо синхронизировать систему с установкой для получения контакта онлайн. Затем каждый пользователь должен настроить клиент для синхронизации. Как упомянуто существует много различных плагинов для мобильных телефонов.

Все контакты затем продвинуты к Вашим клиентским телефонам. Можно сгруппировать их и установить глобальные полномочия. Возможно, это помогло бы. Но предупредите, все еще трудно разбудить выполнение eGroupware и установить правильно.

0
ответ дан 3 December 2019 в 04:35

Не выставляйте их, совместно используйте их...

Я нашел эту статью, которая имеет достойное объяснение того, как совместно использовать контакты через Общедоступную Папку. И эта другая статья с немного большей информацией, плюс больше на том, что может быть сделано с общедоступными папками.

После того как это - установка, работает отлично.

0
ответ дан 3 December 2019 в 04:35

Теги

Похожие вопросы