Usuário com melhor resposta
Problemas de replicação de script

Pergunta
-
Olá!
Pessoal, estou com um problema semelhante ao de alguns amigos daqui do fórum, mas como cada ambiente é um ambiente, preciso de ajuda, se possível.
Seguinte, tenho um script de logon (.vbs) via GPO na minha OU "Usuários" e aplicado na "Configuração de usuário". O problema é que o script não funciona pra nenhum user, ou seja, o usuário efetua o login, mas não mapeia impressoras, unidades de rede, etc. Porém, se rodar o .vbs manualmente, ele executa os parâmetros corretamente.
>>Estrutura do AD:
domain
|_site
|_Controlador(es) de domínio
|_Estações
|_Impressoras
|_Internet off
|_Servidores
|_Trash
|_Usuários
>>Código Script:
'' Início do Script
''===================================================================''===================================================================
''Remove Mapeamentos.On Error Resume Next
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemoveNetworkDrive "P:", true, true
WshNetwork.RemoveNetworkDrive "Q:", true, True
WshNetwork.RemoveNetworkDrive "S:", true, True
WshNetwork.RemoveNetworkDrive "T:", true, True
WshNetwork.RemoveNetworkDrive "X:", true, True''===================================================================
''Mapeamento de unidade(es) de rede e impressora(as) por grupo.On Error Resume Next
Err.clear 0Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")strUserPath = "LDAP://" & objSysInfo.UserName
Set objUser = GetObject(strUserPath)For Each strGroup in objUser.MemberOf
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
strGroupName = objGroup.CNSelect Case strGroupName
Case "BioImuno"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case "Delegação POA"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "X:", "\\SERVER\SHARE"
Case "Estoque"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case "Gerência"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case "Hematologia"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case "Microbiologia"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case "Qualidade"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case "Público"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case "SAC"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "S:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "X:", "\\SERVER\SHARE"
Case "TI"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "S:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "T:", "\\SERVER\SHARE"
Case "Triagem"
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
End SelectNext
''===================================================================
''Mapeamento de impressoras por grupo.On Error Resume Next
set objNetwork = CreateObject("WScript.Network")
strDom = objNetwork.UserDomain
strUser = objNetwork.UserName
Set objUser = GetObject("WinNT://" & strDom & "/" & strUser & ",user")For Each objGroup In objUser.Groups
Select Case objGroup.Name
Case "BioImuno"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Delegação POA"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Estoque"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Gerência"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Hematologia"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Microbiologia"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Qualidade"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Público"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "SAC"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "TI"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"
Case "Triagem"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.AddWindowsPrinterConnection "\\SERVER\PRN"
objNetwork.SetDefaultPrinter "\\SERVER\PRN"End Select
Next
''===================================================================
''Sincroniza a hora das estações com o servidor.Set objWMIService = GetObject("winmgmts:" & strComputer & "rootCIMV2")
Set objShell = CreateObject("WScript.shell")
strCmd = "net time dominatorpoa /set /yes"
set objexec = objshell.exec(strcmd)''===================================================================
''Horário de Verão.''
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!" & strComputer & "rootdefaulttdRegProv")
strKeyPath = "SystemCurrentControlSetControlTimeZoneInformation"
strValueName = "DaylightName"
strValue= "E. South America Daylight Time"
oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
strDWORDValueName = "DisableAutoDaylightTimeSet"
oReg.DeleteValue HKEY_LOCAL_MACHINE,strKeyPath,strDWORDValueName''===================================================================
''Fim do Script
Então gente, é isso. Antes, no início funcionava, mas depois de um certo tempo, parou de mapear e tal. Já fiz de tudo, mas não consigo resolver; só não queria ir de máquina em máquina e mapear manualmente. :(Abs.
Silvio Dutra Junior
- Editado Silvio Junior terça-feira, 2 de junho de 2009 20:39 Edição de texto
Respostas
-
Ola,
Silvio,
Faça um teste com o script abaixo:
''Mapeamento de unidade(es) de rede e impressora(as) por grupo.
On Error Resume Next
Err.clear 0
Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")
strUserPath = "LDAP://" & objSysInfo.UserName
Set objUser = GetObject(strUserPath)
qtdGrupo = 0
if isArray(objUser.Memberof) then
For Each strGroup in objUser.MemberOf
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
strGroupName = UCASE(objGroup.CN)
checaGrupo strGroupName
qtdGrupo = qtdGrupo + 1
Next
Elseif NOT IsEmpty(objUser.MemberOf) Then
strGroupPath = "LDAP://" & objUser.MemberOf
Set objGroup = GetObject(strGroupPath)
strGroupName = UCASE(objGroup.CN)
checaGrupo(strGroupName)
End if
Sub ChecaGrupo(grupos)
Select Case grupos
Case UCASE("BioImuno")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Delegação POA")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "X:", "\\SERVER\SHARE"
Case UCASE("Estoque")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Gerência")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Hematologia")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Microbiologia")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Qualidade")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Público")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("SAC")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "S:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "X:", "\\SERVER\SHARE"
Case UCASE("TI")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "S:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "T:", "\\SERVER\SHARE"
Case UCASE("Triagem")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
End Select
End sub
Teste e nos retorne.
Até mais,
Jesiel
Obs.: Se útil, classifique- Marcado como Resposta Fábio JrModerator quinta-feira, 14 de novembro de 2013 14:22
Todas as Respostas
-
Olá Silvio,
Verifique com o comando gpresult (no cliente) se a GPO está sendo aplicada.
Se estiver, crie um script simples... só com um alerta na tela do usuário e coloque ele nesta GPO...
Verifique se o script foi aplicado... -> Assim verificamos se é problema na GPO...
Se tudo estiver funcionando... Divida seu script em 3 partes para ver se esta funcionando...
1 -> Deixe somente a parte de desconectar os mapeamentos e faça os testes -> Se funcionar , passe para o passo 2
2 -> Adicione a parte dos mapeamentos -> Se funcionar -> Passe para o passo3
3 -> Adicione a parte de sincronização de hora..
Assim você consegue descobrir o que está causando problema na aplicação do seu script.
Faça os testes e poste os resultados.
Até mais,
Jesiel
Obs.: Se útil, classifique -
Uma coisa que pode ser tentada também é verificar o log do processamento de
GPO em uma estação qualquer para saber exatamente o que está acontecendo.
Só uma dica extra: não é recomendado acertar o relógio dessa forma, muito
menos configurar o horário de verão.
[]s,
Vinicius
"Jesiel S. Pereira" wrote in message
news:6c726c16-5507-479e-9fdb-8a4132c52afa...
> Olá Silvio,
>
> Verifique com o comando gpresult (no cliente) se a GPO está sendo
> aplicada.
>
> Se estiver, crie um script simples... só com um alerta na tela do
> usuário e coloque ele nesta GPO...
>
> Verifique se o script foi aplicado... -> Assim verificamos se é problema
> na GPO...
>
> Se tudo estiver funcionando... Divida seu script em 3 partes para ver se
> esta funcionando...
>
> 1 -> Deixe somente a parte de desconectar os mapeamentos e faça os
> testes -> Se funcionar , passe para o passo 2
>
> 2 -> Adicione a parte dos mapeamentos -> Se funcionar -> Passe para o
> passo3
>
> 3 -> Adicione a parte de sincronização de hora..
>
> Assim você consegue descobrir o que está causando problema na
> aplicação do seu script.
>
> Faça os testes e poste os resultados.
>
> Até mais,
>
> Jesiel
>
> Obs.: Se útil, classifique -
Valeu Josiel!
>>Mensagem de teste:
Cara, fiz somente uma mensagem de alerta ao usuário dando Bom Dia, Boa Tarde ou Boa Noite, não sincronizei hora nem qualquer outro tipo de mapeamento e a mensagem teve êxito nos 3 usuários testados, sendo que um deles, é de uma OU diferente da "Usuários", se localiza em "Internet Off".
Usuário A: Ok. (OU Usuários)
Usuário B: Ok. (OU Internet Off)
Usuário C: Ok. (OU Usuários)>>Mapeamento unidade de rede:
Aqui, somente um usuário conseguiu mapear as unidades de acordo com o script. Esse usuário é o meu e faço parte do grupo Administradores, já os outros 2, são usuários padrão.
Usuário A: Ok. (OU Usuários)
Usuário B: Não (OU Internet Off)
Usuário C: Não. (OU Usuários)
>>Mapeamento impressoras:
Usuário A: Ok. (OU Usuários)
Usuário B: Não (OU Internet Off)
Usuário C: Não. (OU Usuários)
Não consigo achar o foco do problema, já que não posso culpar o script porque ele mapeia as unidades para o meu usuário, por exemplo e o resto funciona para todos. Se for algo no AD/OU não sei informar, porque antes funcionava.Obrigado aí!
Abs.
Silvio Junior
-
-
Olá,
Execute o script dando um alert no nome do grupo para verificar os grupos do usuário. Segue abaixo:
On Error Resume Next
Err.clear 0
Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")
strUserPath = "LDAP://" & objSysInfo.UserName
Set objUser = GetObject(strUserPath)
For Each strGroup in objUser.MemberOf
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
strGroupName = objGroup.CN
wscript.echo strGroupName
Next
Verifique se não tem erro na digitação... ou se está mostrando os grupos dos usuários corretamente.
Até mais,
Jesiel
Obs.: Se útil, classifique -
-
-
Olá Josiel!
Sim, coloquei o alert no case e apareceu o(os) grupo(os) cujo o usuário pertence, mas como te disse, isso somente aconteceu com 1 de 3 usuários testados, e que foi o meu. Nos outros que não funcionaram, apareceu o quadro do script vazio, sem nome de grupo, +- assim:
---------------------------------
| Windows Script Host |
---------------------------------
| |
| --------------
| | OK |
| --------------
| |
--------------------------------
Com relação a checagem dos grupos, nenhum usuários pertence a um ou mais grupos.
Abs.
Silvio Jr -
Olá Josiel!
Sim, coloquei o alert no case e apareceu o(os) grupo(os) cujo o usuário pertence, mas como te disse, isso somente aconteceu com 1 de 3 usuários testados, e que foi o meu. Nos outros que não funcionaram, apareceu o quadro do script vazio, sem nome de grupo, +- assim:
---------------------------------
| Windows Script Host |
---------------------------------
| |
| --------------
| | OK |
| --------------
| |
--------------------------------
Com relação a checagem dos grupos, nenhum usuários pertence a um ou mais grupos.
Abs.
Silvio Jr
O mais estranho é o seguinte: Se eu rodo um gpresult, aparece o script certo que o usuário está pegando e o script todo funciona, menos a parte de mapeamentos e etc.
:| -
...tive analisando e percebi que o usuário pega o script e mapeia tudo, menos as unidades de rede, ou seja, impressoras, papel de parede, permissões, tudo isso funciona normalmente, o problema é mapear. No alert do case, é como se o usuário não fizesse parte de nenhum grupo.
-
Existe um problema bastante comum com mapeamentos por grupos. O problema está no fato de que o método que retorna os nomes dos grupos pode retornar nulo, uma única string (que causa problemas em case e foreach) ou um vetor de strings.Procure aqui no forum mesmo que isso já foi explicado e resolvido... pode ser que seja o seu problema.[]s,
--
Vinicius Canto Xavier
MVP Scripting - Admin Frameworks - PowerShellBlog sobre scripting e powershell: http://viniciuscanto.blogspot. com"Silvio Junior" wrote in message news:4fac71a0-8e28-430 d-8362-894dc4ff1add......tive analisando e percebi que o usuário pega o script e mapeia tudo, menos as unidades de rede, ou seja, impressoras, papel de parede, permissões, tudo isso funciona normalmente, o problema é mapear. No alert do case, é como se o usuário não fizesse parte de nenhum grupo.
-
Olá,
Silvio, é como o Vinicius falou... provavelmente seus usuários estão em apenas um grupo... então o retorno do grupo não vai ser um array e sim uma string...
Verifique se realmente os usuários que não estão sendo mapeados pertence à um unico grupo... Deve ser a causa do problema.
Até mais,
Jesiel
Obs.: Se útil, classifique -
Bom dia!
O meu usuário, por exemplo, pertence a 3 grupos. Os outros usuários que não são mapeados pertencem a 2 ou 3 grupos também. Eu ontem estive fazendo outro script, mas agora em .bat, pra tentar algo desesperado em consertar e ainda por cima criei por máquina, pra não ter erro... e até o momento, acho que vai funcionar.Obrigado à vocês pela ajuda!
Abs.
Silvio Junior
-
Ola,
Silvio,
Faça um teste com o script abaixo:
''Mapeamento de unidade(es) de rede e impressora(as) por grupo.
On Error Resume Next
Err.clear 0
Set objSysInfo = CreateObject("ADSystemInfo")
Set objNetwork = CreateObject("Wscript.Network")
strUserPath = "LDAP://" & objSysInfo.UserName
Set objUser = GetObject(strUserPath)
qtdGrupo = 0
if isArray(objUser.Memberof) then
For Each strGroup in objUser.MemberOf
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
strGroupName = UCASE(objGroup.CN)
checaGrupo strGroupName
qtdGrupo = qtdGrupo + 1
Next
Elseif NOT IsEmpty(objUser.MemberOf) Then
strGroupPath = "LDAP://" & objUser.MemberOf
Set objGroup = GetObject(strGroupPath)
strGroupName = UCASE(objGroup.CN)
checaGrupo(strGroupName)
End if
Sub ChecaGrupo(grupos)
Select Case grupos
Case UCASE("BioImuno")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Delegação POA")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "X:", "\\SERVER\SHARE"
Case UCASE("Estoque")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Gerência")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Hematologia")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Microbiologia")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Qualidade")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("Público")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
Case UCASE("SAC")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "S:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "X:", "\\SERVER\SHARE"
Case UCASE("TI")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "S:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "T:", "\\SERVER\SHARE"
Case UCASE("Triagem")
objNetwork.MapNetworkDrive "P:", "\\SERVER\SHARE"
objNetwork.MapNetworkDrive "Q:", "\\SERVER\SHARE"
End Select
End sub
Teste e nos retorne.
Até mais,
Jesiel
Obs.: Se útil, classifique- Marcado como Resposta Fábio JrModerator quinta-feira, 14 de novembro de 2013 14:22