我在 Windows 10 中运行的脚本中使用 PSExec 向 Windows 7 发送一些命令。但是,有时这些命令不起作用,我意识到发生这种情况是因为在随机时间,当我发送命令时,我会收到消息:
“这是该程序的第一次运行。您必须接受 EULA 才能继续。使用 -accepteula 接受 EULA。”
因此命令没有任何效果。然后,我手动发送命令并接受 EULA,一切正常,直到下一个随机时间再次显示上一条消息。
我想知道如何阻止这种行为。
答案1
问题是您的脚本可以在不同的上下文中运行。例如,用户可能被识别为本地用户,并且脚本将代表该用户开始执行。通常,组策略脚本代表系统用户等等。除其他事项外,您正在使用不同的系统环境运行脚本。在启动脚本之前,当您已经连接到资源时,值得检查环境变量,这些变量对于回答脚本在哪里、以什么权限以及在什么环境中执行的问题很重要。对于许多系统,特别是 Windows 7 有临时变量,“易挥发的”。
读取环境变量.vbs:
Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
WScript.Echo "WINDIR=" & WshEnv.Item("WINDIR") & vbCrLf &_
vbCrLf
Set WshShell = CreateObject("WScript.Shell")
WScript.Echo "Environment System:" & vbCrLf &_
"..............................................."
For Each IEnv In WshShell.Environment("System")
WScript.Echo IEnv
Next
WScript.Echo vbCrLf & "Environment User:" & vbCrLf &_
"..............................................."
For Each IEnv In WshShell.Environment("User")
WScript.Echo IEnv
Next
WScript.Echo vbCrLf & "Environment Volatile:" & vbCrLf &_
"..............................................."
For Each IEnv In WshShell.Environment("Volatile")
WScript.Echo IEnv
Next
WScript.Echo vbCrLf & "Environment Process:" & vbCrLf &_
"..............................................."
For Each IEnv In WshShell.Environment("Process")
WScript.Echo IEnv
Next
看法:
cscript ReadEnv.vbs | more
保存到文件:
cscript ReadEnv.vbs >> out.txt
如果你不关心你的脚本是由哪个用户执行的,你可以在其中添加一行
psexec //YourRemoteStationName reg ADD HKCU\Software\Sysinternals\PSexec /v EulaAccepted /t REG_DWORD /d 1 /f
在这种情况下,您将收到远程站点的密钥安装,并且
如果 psexec 在本地运行,则安装密钥:
reg ADD HKCU\Software\Sysinternals\PSexec /v EulaAccepted /t REG_DWORD /d 1 /f
答案2
psexec
使用参数运行-accepteula
。
从运行时的帮助psexec /?
:
-accepteula 此标志抑制许可证对话框的显示。