簡體   English   中英

WMI遠程安裝問題:遠程計算機無法訪問安裝包

[英]Problem with remote install by WMI : the installation package is not accessible form the remote machine

我想在遠程計算機上安裝MSI包。 本地和遠程計算機都是名為“adn.lan”的域的成員,並且我作為連接參數傳遞的用戶/密碼具有對遠程計算機的完全訪問權限。 當我將connection.Authority設置為“ntdlmdomain:adran.lan”時 ,返回參數顯示“ 無效參數 ”,當我將其保留為null並將其標記為時connect()將成功連接但是當它嘗試安裝包時return參數顯示已尋址的包不可訪問

這是我嘗試過的代碼。

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到Identity時,結果將是“拒絕訪問”。

如果我理解了您的問題和后續注釋,您會發現當程序包路徑位於與目標計算機不同的計算機上時(即通常可從目標計算機訪問的UNC路徑),它將無效。 但是,將程序包復制到目標計算機並在目標計算機上傳遞本地路徑時,安裝將起作用。

我認為失敗的原因是由於DCOM假冒級別的性質。
Impersonate允許您在目標計算機上使用調用方的憑據 - 但不能從目標計算機連接到另一台計算機 要使用相同的憑據進行第二跳,需要委托級別。 (問題是,這有安全風險,所以所有指導都說“警告警告警告”,一切都使得默認很難。)
當您要求目標計算機在單獨的網絡位置訪問安裝包時,這是需要憑據的“第二跳”,但是模擬意味着您只能在目標計算機上使用您的憑據,而不是從那里傳遞到遠程文件位置。

TechNet對模擬級別有一個很好的總結,請參閱WMI安全設置頂部的表6.6 DCOM模擬級別

ps為了好玩,您可能會看到是否有辦法在不復制到目標計算機的情況下執行此操作。 如果您能找到一種方法以允許匿名訪問的方式將安裝包文件公開到網絡,我想知道是否允許第二跳,因為只需要匿名憑據? 不過不確定。 如果你像我一樣,可能會進行大量的猜測和測試:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM