我有一个运行login脚本(.vbs)并将其链接到包含W2012R2 RDS主机的OU的GPO(configuration有回送replace)。
我已经做了这些(问题相关)的政策变化:
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
当用户login时,脚本在前台完美运行,但根据我所做的设置,我预计命令提示符根本不会popup。 那么,我在这里做错了什么,微软的“遗留脚本”的定义是什么?
我知道,我可以写一个小的“包装脚本”,用隐藏的参数调用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
因此,将此调用replace为cmd.exe …
'objShell.Run "cmd /C " & strRequiredScriptHost & " " & WScript.ScriptFullName & " " & strArgColl, 0, false
…这使得它隐藏起来。 任务完成。
objShell.Run strRequiredScriptHost & " " & WScript.ScriptFullName & " " & strArgColl, 0, false