У меня есть объект групповой политики (настроенный с заменой обратной петли), который запускает сценарий входа в систему (.vbs) и связывает его с OU, содержащим хост W2012R2 RDS.
Я внес следующие (связанные с вопросом) изменения в политику:
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
Когда пользователь входит в систему, сценарий отлично работает на переднем плане, но в соответствии с настройками, которые я сделал, я ожидал, что командная строка вообще не появится. Итак, что я здесь делаю не так, и что именно Microsoft определяет «устаревший сценарий»?
Я знаю, что могу написать небольшой "сценарий-оболочку", который вызывает cscript.exe
со скрытым параметром, но я хотел бы сохранить его как можно более чистым и хотел бы понять, почему мои настройки не работают.
Я выяснил, что вызывает это, поскольку мои настройки GPO верны. Скрипт, который мне нужно запустить, использует функцию для принудительной установки 32-битной версии хоста сценариев.
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
Так что заменив этот вызов на cmd.exe
...
'objShell.Run "cmd /C " & strRequiredScriptHost & " " & WScript.ScriptFullName & " " & strArgColl, 0, false
... с этим он скрылся. Миссия завершена.
objShell.Run strRequiredScriptHost & " " & WScript.ScriptFullName & " " & strArgColl, 0, false