WS2008 subst no script de Logon não “gruda”

1

Eu tenho um ambiente de servidor de terminal exclusivamente com o Windows Server 2008.
Meu problema é que eu preciso "mapear" uma letra de unidade para cada pasta Temp usuários. Isso se deve a um aplicativo legado que exige uma pasta Temp separada para cada usuário, mas que não entende% temp%.

Então, basta adicionar "subst t:% temp%" ao script de logon, certo?
O problema é que, embora o comando seja executado, o subst não "gruda" e o usuário não obtém um drive T:.
Aqui está o que eu tentei;

A versão mais simples:

'Mapping a temp drive  
Set WinShell = WScript.CreateObject("WScript.Shell")  
WinShell.Run "subst T: %temp%", 2, True  

Isso não funcionou, então tentei isso para mais informações de depuração:

'Mapping a temp drive
Set WinShell = WScript.CreateObject("WScript.Shell")
Set procEnv = WinShell.Environment("Process")
wscript.echo(procEnv("TEMP"))
tempDir = procEnv("TEMP")
WinShell.Run "subst T: " & tempDir, 3, True

Isso mostra o caminho temp correto quando o usuário efetua login - mas ainda não há T: Drive. Decidi recorrer à força bruta e colocar isso no meu script de login:

'Mapping a temp drive
Set WinShell = WScript.CreateObject("WScript.Shell")
WinShell.Run "\domain\sysvol\esl.hosted\scripts\tempdir.cmd", 3, True

onde \ domain \ sysvol \ esl.hosted \ scripts \ tempdir.cmd tem este conteúdo:

echo on
subst t: %temp%
pause

Quando eu me conecto com o acima, a janela de comando se abre e eu posso ver o comando subst sendo executado corretamente, com o caminho correto. Mas ainda não T: drive.

Eu tentei executar todos os scripts acima fora de um script de login e eles sempre funcionam perfeitamente - esse problema só ocorre ao fazer isso de dentro de um script de login.

Encontrei uma referência passageira em um fórum do MSFN sobre um problema semelhante quando o usuário já está logado em outra máquina - mas eu tenho esse problema mesmo sem estar logado em outra máquina.

Qualquer sugestão sobre como superar isso será muito apreciada.

    
por Frans 05.10.2009 / 21:13

5 respostas

1

Se você criar um compartilhamento para a unidade em que os perfis de usuário estão localizados (geralmente C: \ Usuários). Supondo que o compartilhamento seja PROFILE $, você pode usar um script como:

@echo off
echo.                 TEMP Drive Mapping


:TEMPDRIVE
  echo.                   Mapping Temp Drive...
  if exist T:\  echo Y | subst T: /d 
  if exist T:\  echo Y | net use T: /D
  if exist T:\ goto :TEMPDRIVE_ERROR

  if not exist %temp% MD %temp%
  NET USE T: \localhost\profiles$\%temp:~9% /P:N  > nul: 2>&1
  if not exist T:\ goto :TEMPDRIVE_ERROR

  goto :TEMPDRIVE_COMPLETE 
:TEMPDRIVE_ERROR
  echo.                  ERROR: Unable to MAP Temp Drive!
:TEMPDRIVE_COMPLETE

:END
:EXIT

GOTO :EOF

Geralmente% TEMP% é prefixado com C: \ Users \ no Windows Server 2008, e é por isso que% temp: ~ 9% é usado para remover esse prefixo. Se estiver usando o Windows Server 2003, será% temp: ~ 12%

    
por 26.01.2011 / 19:59
1

Vou adivinhar que seus usuários têm direitos de "Administrador" e o Controle de Conta de Usuário está habilitado no Terminal Server.

Se for esse o caso, o que você está vendo é um comportamento "por design".

Suspeito que o seu script está funcionando bem. Como o Controle de Conta de Usuário está ativado, o token filtrado dos usuários, sob o qual o Explorer é executado, não tem acesso às "unidades" que eram "SUBST" quando o script de logon era executado.

Se você não for usar as preferências de política de grupo, terá duas opções:

  • Torne os usuários padrão dos usuários. Esta seria a minha preferência, mas parece ser muito difícil para a maioria das pessoas.

  • Altere o valor do Registro EnableLinkedConnections para "1" (consulte o link para detalhes).

por 26.01.2011 / 20:22
0

A primeira coisa que eu tentaria é mapear a unidade T para outra coisa (como um compartilhamento de arquivos que o KNOW funciona) apenas para eliminar qualquer restrição de letra de unidade em seu sistema.

Em seguida, se isso funcionar, tentarei executar o script de forma interativa, ou seja, um prompt de cmd como usuário real e digitar o comando / caminho do script.

Se isso também funcionar, podemos ter certeza de que o script em si funciona, mas a execução do script no logon pode não funcionar. Você tem outro script que você poderia testar? Além disso, verifique as configurações do seu GPO para execução assíncrona de scripts.

Como sempre, ao encontrar a agulha no palheiro: Tente eliminar / isolar todas as variáveis em seu ambiente que possam causar isso (isso é o que fizemos acima), desative todos os GPOs e teste novamente. Se funcionar, ative um e um GPO no seu ambiente e teste novamente para cada alteração realizada.

Desculpe, não posso ser mais específico, mas a abordagem "Isolar e testar" geralmente é a maneira mais rápida de resolver problemas como esses.

    
por 05.10.2009 / 21:26
0

VBS com o script followign

'Mapping a temp drive  
Set WinShell = WScript.CreateObject("WScript.Shell")  
WinShell.Run "subst T: %temp%", 2, False

funciona muito bem no meu Windows Server 2008/2008 R2

    
por 24.12.2012 / 17:17
-1

Tentei mapeá-lo com o antigo "net use"?

    
por 06.10.2009 / 01:44