Internet explorer 如何从javascript获取终端服务客户端计算机名?

Internet explorer 如何从javascript获取终端服务客户端计算机名?,internet-explorer,activex,terminal-services,Internet Explorer,Activex,Terminal Services,是否可以从运行Internet Explorer的javascript获取机器名、IP或MAC地址(基本上是客户端网络信息) 我发现以下代码似乎可以实现这一点: function Button1_onclick() { var locator = new ActiveXObject("WbemScripting.SWbemLocator"); var service = locator.ConnectServer("."); var properties = service.Exec

是否可以从运行Internet Explorer的javascript获取机器名、IP或MAC地址(基本上是客户端网络信息)

我发现以下代码似乎可以实现这一点:

function Button1_onclick() {
  var locator = new ActiveXObject("WbemScripting.SWbemLocator");
  var service = locator.ConnectServer(".");
  var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
  var e = new Enumerator (properties);
  document.write("<table border=1>");
  dispHeading();
  for (;!e.atEnd();e.moveNext ())
  {
        var p = e.item ();
        document.write("<tr>");
        document.write("<td>" + p.Caption + "</td>");
        document.write("<td>" + p.IPFilterSecurityEnabled + "</td>");
        document.write("<td>" + p.IPPortSecurityEnabled + "</td>");
        document.write("<td>" + p.IPXAddress + "</td>");
        document.write("<td>" + p.IPXEnabled + "</td>");
        document.write("<td>" + p.IPXNetworkNumber + "</td>");
        document.write("<td>" + p.MACAddress + "</td>");
        document.write("<td>" + p.WINSPrimaryServer + "</td>");
        document.write("<td>" + p.WINSSecondaryServer + "</td>");
        document.write("</tr>");
  }
  document.write("</table>");
功能按钮1\u onclick(){
var定位器=新的ActiveXObject(“WbemScripting.SWbemLocator”);
var service=locator.ConnectServer(“.”);
var properties=service.ExecQuery(“从Win32_NetworkAdapterConfiguration中选择*);
var e=新枚举数(属性);
文件。填写(“”);
dispHeading();
对于(;!e.atEnd();e.moveNext())
{
var p=e.item();
文件。填写(“”);
文件。写(“+p.标题+”);
document.write(“+p.IPFilterSecurityEnabled+”);
document.write(“+p.IPPortSecurityEnabled+”);
document.write(“+p.IPXAddress+”);
document.write(“+p.IPXEnabled+”);
document.write(“+p.IPXNetworkNumber+”);
document.write(“+p.MACAddress+”);
document.write(“+p.WINSPrimaryServer+”);
document.write(“+p.WINSSecondaryServer+”);
文件。填写(“”);
}
文件。填写(“”);
}

因此,它使用了一个ActiveX对象来完成这一任务,该对象似乎与操作系统一起安装。在终端服务会话中是否可以执行类似的操作?获取终端服务客户端网络信息?(不是终端服务器网络信息,当从终端服务会话运行时,上面的代码就是这样做的)


我想可能还有另一个活动的X对象可以实现这一点?

如果用户登录到终端服务器并在该TS会话中访问Internet Explorer中的页面,则Internet Explorer(及其实例化的任何ActiveX控件)在终端服务器硬件上运行,而不是在客户端硬件上运行


从这个角度来看,在客户端硬件上运行的唯一代码是终端服务客户端软件。要检索有关终端服务客户端硬件/网络/等的网络信息,必须在客户端硬件上运行代码。

如果用户登录到终端服务器并在该TS会话中访问Internet Explorer中的页面,则Internet Explorer(及其实例化的任何ActiveX控件)正在终端服务器硬件上运行,而不是在客户端硬件上运行


从这个角度来看,在客户端硬件上运行的唯一代码是终端服务客户端软件。要检索有关终端服务客户机硬件/网络/等的网络信息,您必须在客户机硬件上运行代码。

基本上,有两种可能会记住客户机名称/地址:

  • 使用MFCOM,即
    MetaFrameSession
    对象
  • 使用WMI,
    root\Citrix
    中的
    MetaFrame\u ICA\u客户端
    类看起来很有希望
这两种解决方案的主要缺点是,它们需要的用户权限比您愿意提供的要多。据我所知,Citrix中至少需要“帐户视图”权限,但我现在无法测试它。我两个都不能作为普通用户工作

为了给您一个想法,使用MFCOM访问信息将如下所示:

var MetaFrameSessionObject = 6;

var oShell   = new ActiveXObject("WScript.Shell");
var oSession = new ActiveXObject("MetaFrameCOM.MetaFrameSession");

oSession.Initialize(
  MetaFrameSessionObject, 
  oShell.ExpandEnvironmentStrings("%COMPUTERNAME%"), 
  oShell.ExpandEnvironmentStrings("%SESSIONNAME%"), 
  -1
);

alert(oSession.ClientAddress);

基本上,有两种可能会让人想到客户名称/地址:

  • 使用MFCOM,即
    MetaFrameSession
    对象
  • 使用WMI,
    root\Citrix
    中的
    MetaFrame\u ICA\u客户端
    类看起来很有希望
这两种解决方案的主要缺点是,它们需要的用户权限比您愿意提供的要多。据我所知,Citrix中至少需要“帐户视图”权限,但我现在无法测试它。我两个都不能作为普通用户工作

为了给您一个想法,使用MFCOM访问信息将如下所示:

var MetaFrameSessionObject = 6;

var oShell   = new ActiveXObject("WScript.Shell");
var oSession = new ActiveXObject("MetaFrameCOM.MetaFrameSession");

oSession.Initialize(
  MetaFrameSessionObject, 
  oShell.ExpandEnvironmentStrings("%COMPUTERNAME%"), 
  oShell.ExpandEnvironmentStrings("%SESSIONNAME%"), 
  -1
);

alert(oSession.ClientAddress);

那么您是说终端服务器进程无法知道它代表哪个客户机运行代码?这似乎不对,是吗?你是说终端服务器进程无法知道它代表哪个客户机运行代码?这似乎不对,是吗?