Como ocultar a execução de scripts de logon de usuários (.vbs) sem usar um script de wrapper?

2

Eu tenho um GPO (configurado com a substituição de loopback) que executa um script de logon (.vbs) e o vincula a uma OU que contém um host W2012R2 RDS.

Eu fiz essas alterações (relacionadas a questões) na política:

Computer Configuration -> Policies -> Administrative Templates -> System -> Group Policy -> Configure Logon Script Delay -> Enabled -> minute: 0 

User Configuration -> Policies -> Windows Settings -> Scripts (Logon/Logoff) -> MyScript.vbs 

User Configuration -> Policies -> Administrative Templates -> System -> Run legacy logon scripts hidden -> Enabled 

User Configuration -> Policies -> Administrative Templates -> System -> Display instructions in logon scripts as they run -> Disabled

Quando um usuário faz logon, o script é executado perfeitamente em primeiro plano, mas de acordo com as configurações que eu fiz, eu esperava que o prompt de comando não fosse exibido. Então, o que estou fazendo errado aqui e qual é exatamente a definição da Microsoft de um "script legado"?

Estou ciente de que posso escrever um pequeno "wrapper-script" que chame cscript.exe com o parâmetro oculto, mas gostaria de mantê-lo o mais limpo possível e gostaria de entender por que minhas configurações não funcionam .

    
por Matze 30.03.2015 / 15:50

1 resposta

1

Eu entendi o que está causando isso, pois as configurações do meu GPO estão corretas. O script que preciso executar usa uma função para forçar a versão de 32 bits do host de script.

Function fncForce32bitCscript()
    Dim strCurrentScriptHost : strCurrentScriptHost  = lcase(wscript.fullname)
    dim strRequiredScriptHost: strRequiredScriptHost = "c:\windows\system32\cscript.exe"
    if fncCheckOS = "X64" Then
        strRequiredScriptHost = "c:\windows\syswow64\cscript.exe"
    end If  

    Dim objShell
    Set objShell = CreateObject("WScript.Shell")
    objShell.run "cscript //h:cscript",0,True

    If strCurrentScriptHost = strRequiredScriptHost Then
        'no switching to cscript required
    Else
      Dim strArgColl
          strArgColl = " "
          If WScript.Arguments.Count>0 Then
            Dim ArgCollect
            For ArgCollect = 0 To WScript.Arguments.Count-1
              strArgColl = strArgColl & chr(34) & (WScript.Arguments.Item(ArgCollect)) & chr(34) & " "
            Next
          End If
          'wscript.echo "script will be re-launched with the required script host " & strRequiredScriptHost
          objShell.Run  "cmd /C " & strRequiredScriptHost & " " & WScript.ScriptFullName & " " & strArgColl,1,false
          'Set objShell = Nothing
          'wscript.sleep 3000
          WScript.Quit  
    End If
End Function

Então, substituindo esta chamada para cmd.exe ...

'objShell.Run "cmd /C " & strRequiredScriptHost & " " & WScript.ScriptFullName & " " & strArgColl, 0, false

... com isso fez com que fosse escondido. Missão cumprida.

objShell.Run strRequiredScriptHost & " " & WScript.ScriptFullName & " " & strArgColl, 0, false
    
por 31.03.2015 / 08:47