O script LOGON não adicionará o primeiro compartilhamento

1

Eu tenho o seguinte problema:

Quando executo meu LOGON_SCRIPT.vbs para adicionar compartilhamentos de rede a usuários de um grupo específico, ele pula o primeiro caso o usuário seja parte do Kleinkunstig_Users (ele não adicionará o primeiro compartilhamento). Mas se eu adicionar outro grupo, ele adicionará a parte do primeiro e do outro. Por favor ajude? (o script está abaixo)

'start script

On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")

'find user name

strUserPath = "LDAP://" & objSysInfo.UserName
Set objUser = GetObject(strUserPath)

'find user group's

For Each strGroup in objUser.MemberOf
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
strGroupName = objGroup.CN

' if user member of a group then map network drive

Select Case strGroupName
'
Case "Kleinkunstig_Users"
objNetwork.MapNetworkDrive "Y:", "\KL01\Kleinkunstig"

Case "Kleinkunstig_Sales" 
objNetwork.MapNetworkDrive "V:", "\KL01\Sales"

Case "Kleinkunstig_Marketing" 
objNetwork.MapNetworkDrive "M:", "\KL01\Marketing"

Case "Kleinkunstig_Maanagement" 
objNetwork.MapNetworkDrive "X:", "\KL01\Management"

Case "Kleinkunstig_IT" 
objNetwork.MapNetworkDrive "I:", "\KL01\IT"

Case "Kleinkunstig_Financial" 
objNetwork.MapNetworkDrive "O:", "\KL01\Financial"

Case "Kleinkunstig_Administrator" 
objNetwork.MapNetworkDrive "Q:", "\KL01\Administrators"
'
End Select
Next

'end script
    
por Msmit1993 08.05.2012 / 15:45

1 resposta

1

No código a seguir, MemberOf pode retornar uma coleta ou um valor de sequência (se o usuário for membro de apenas um grupo além do grupo principal):

For Each strGroup in objUser.MemberOf

Você não pode "For Each" sobre objUser.MemberOf se objUser.MemberOf for uma string.

Provavelmente, há um erro que você não está vendo devido à seguinte linha:

On Error Resume Next

(note que remover essa linha de um script que muitos usuários estão executando pode significar que todos começam a receber erros no login)

Uma maneira muito ruim de testar e corrigir isso é adicionar os usuários em questão a um grupo adicional "fictício". Isso deve forçar o valor retornado por MemberOf para ser uma coleção que você pode, em seguida, enumerar com For Each.

Eu tive sucesso com um script semelhante ao da resposta: Executar automaticamente um script quando eu faço logon no Windows , citado aqui:

Const ENGINEERING_GROUP     = "cn=engineering"
Const FINANCE_GROUP         = "cn=finance"
Const HUMAN_RESOURCES_GROUP = "cn=human resources"

Set wshNetwork = CreateObject("WScript.Network")
wshNetwork.MapNetworkDrive "h:",
"\FileServer\Users\" & wshNetwork.UserName

Set ADSysInfo = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" &
ADSysInfo.UserName)
strGroups = LCase(Join(CurrentUser.MemberOf))

If InStr(strGroups, ENGINEERING_GROUP) Then

    wshNetwork.MapNetworkDrive "g:",
    "\FileServer\Engineering\"
    wshNetwork.AddWindowsPrinterConnection
    "\PrintServer\EngLaser"
    wshNetwork.AddWindowsPrinterConnection
    "\PrintServer\Plotter"
    wshNetWork.SetDefaultPrinter
    "\PrintServer\EngLaser"

ElseIf InStr(strGroups, FINANCE_GROUP) Then

    wshNetwork.MapNetworkDrive "g:",
    "\FileServer\Finance\"
    wshNetwork.AddWindowsPrinterConnection
    "\PrintServer\FinLaser"
    wshNetWork.SetDefaultPrinter
    "\PrintServer\FinLaser"

ElseIf InStr(strGroups, HUMAN_RESOURCES_GROUP) Then

    wshNetwork.MapNetworkDrive "g:",
    "\FileServer\Human Resources\"
    wshNetwork.AddWindowsPrinterConnection
    "\PrintServer\HrLaser"
    wshNetWork.SetDefaultPrinter
    "\PrintServer\HrLaser"

End If

Em teoria, a abordagem acima pode causar problemas se um dos nomes de seu grupo for uma subcadeia de outro, como "finanças" e "finanças e auditoria".

Existem inúmeras outras abordagens possíveis, incluindo testar o valor retornado por MemberOf para determinar se é uma string ou uma matriz.

Possível alternativa ao uso de um script de login para mapear unidades de rede (pode exigir versões de servidor / cliente mais recentes do que você possui atualmente):

Boa sorte!

    
por 08.05.2012 / 16:05