WMI 远程安装问题:无法从远程计算机访问安装包
本文关键字:安装 计算机 访问 问题 程安装 WMI | 更新日期: 2023-09-27 17:57:12
我想在远程计算机上安装 MSI 软件包。本地计算机和远程计算机都是名为"and.lan"的域的成员并且我作为参数传递给连接的用户/密码对远程机器具有完全访问权限。当我设置连接时。返回参数"ntdlmdomain:adran.lan"的权限显示"无效参数",当我将其保留为null
并使其符合注释时,connect()
将成功连接,但是当它尝试安装软件包时,返回参数显示地址包无法访问。
这是我尝试过的代码。
ConnectionOptions connection = new ConnectionOptions();
//connection.Authority = "ntdlmdomain:adn.lan"; // "kerberos:" + domain + @"'" + machine;
connection.Username = username;
connection.Password = password;
//connection.Impersonation = ImpersonationLevel.Identify ;
connection.Authentication = AuthenticationLevel.Packet;
ManagementScope scope = new ManagementScope("''''RemoteMachineName''root''CIMV2", connection);
scope.Connect();
ManagementPath p = new ManagementPath("Win32_Product");
ManagementClass classInstance = new ManagementClass(scope, p, null);
ManagementBaseObject inParams = classInstance.GetMethodParameters("Install");
inParams["AllUsers"] = true;
inParams["Options"] = string.Empty;
inParams["PackageLocation"] = "''''LocalMachineName''Share''Prescription.msi";
ManagementBaseObject outParams = classInstance.InvokeMethod("Install", inParams, null);
string retVal = outParams["ReturnValue"].ToString();
当我theconnection.Impersonation
设置为"标识"时,结果将是"拒绝访问"。
如果我理解您的问题和后续评论,您会发现当包路径与目标计算机(即通常可从目标计算机访问的UNC路径)位于不同的计算机上时,它不起作用。但是,当您将包复制到目标计算机并在目标计算机上传递本地路径时,安装将起作用。
我相信失败的原因是由于 DCOM 模拟级别的性质。
模拟允许您在目标计算机上使用调用方的凭据,但不能从目标计算机连接到另一台计算机。若要使用相同的凭据进行第二个跃点,需要委派级别。(问题是,这有安全风险,所以所有的指南都说"警告警告警告",默认情况下一切都很难。
当您要求目标计算机访问单独网络位置上的安装包时,这是一个需要凭据的"第二个跃点",但模拟意味着您只能在目标计算机上使用您的凭据,而不能从那里传递到远程文件位置。
TechNet 很好地总结了模拟级别,请参阅 WMI 安全设置顶部的表 6.6 DCOM 模拟级别。
附言为了好玩,您可能会查看是否有一种方法可以在不复制到目标计算机的情况下做到这一点。如果您能找到一种以允许匿名访问的方式将安装包文件公开给网络的方法,我想知道是否允许第二个跃点,因为只需要匿名凭据?不过不知道。如果你像我一样,可能会有很多猜测和测试正在进行:)