2017-11-10 22 views
0

컴퓨터를 특정 SCCM 모음으로 가져오고 싶습니다.컴퓨터를 SCCM에 추가하고 특정 컬렉션으로 가져 오기

private void button2_Click(object sender, EventArgs e) 
    { 
     AddNewComputer(PcNameBox.Text, MacAdrBox, PcNameBox.Text, CollectionDropDown.Text); 
    } 

하지만 난 :

public int AddNewComputer(
 
    WqlConnectionManager connection, 
 
    string netBiosName, 
 
    string smBiosGuid, 
 
    string macAddress) 
 
{ 
 
    try 
 
    { 
 
     if (smBiosGuid == null && macAddress == null) 
 
     { 
 
      throw new ArgumentNullException("smBiosGuid or macAddress must be defined"); 
 
     } 
 

 
     // Reformat macAddress to : separator. 
 
     if (string.IsNullOrEmpty(macAddress) == false) 
 
     { 
 
      macAddress = macAddress.Replace("-", ":"); 
 
     } 
 

 
     // Create the computer. 
 
     Dictionary<string, object> inParams = new Dictionary<string, object>(); 
 
     inParams.Add("NetbiosName", netBiosName); 
 
     inParams.Add("SMBIOSGUID", smBiosGuid); 
 
     inParams.Add("MACAddress", macAddress); 
 
     inParams.Add("OverwriteExistingRecord", false); 
 

 
     IResultObject outParams = connection.ExecuteMethod(
 
      "SMS_Site", 
 
      "ImportMachineEntry", 
 
      inParams); 
 

 
     // Add to All System collection. 
 
     IResultObject collection = connection.GetInstance("SMS_Collection.collectionId='ABC0000A'"); 
 
     IResultObject collectionRule = connection.CreateEmbeddedObjectInstance("SMS_CollectionRuleDirect"); 
 
     collectionRule["ResourceClassName"].StringValue = "SMS_R_System"; 
 
     collectionRule["ResourceID"].IntegerValue = outParams["ResourceID"].IntegerValue; 
 

 
     Dictionary<string, object> inParams2 = new Dictionary<string, object>(); 
 
     inParams2.Add("collectionRule", collectionRule); 
 

 
     collection.ExecuteMethod("AddMembershipRule", inParams2); 
 

 
     return outParams["ResourceID"].IntegerValue; 
 
    } 
 
    catch (SmsException e) 
 
    { 
 
     Console.WriteLine("failed to add the computer" + e.Message); 
 
     throw; 
 
    } 
 
}

지금, 나는 버튼 이벤트로 호출하려고 :

은 내가 MSDN에서이 방법을 발견했습니다 미안하지만,이 시점에서 WQLConnectionManager를 호출하는 방법은 없습니다. 개체가 "PcNameBox.Text"전에 미리 설정되어야한다는 것을 알고 있습니다. 그게 내가 같이 호출, 다른 이벤트에 모든 :(

입니다 :.

SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary(); 
WqlConnectionManager connection = new WqlConnectionManager(namedValues); 
connection.Connect(PrimarySiteServer); 

그러나이 방법은 나를 어려움을 겪고 사전에

감사합니다 (그것은, 관대 pleave 유일한 취미입니다) 힌트 용

크리스

답변

0

구글은 당신의 친구, 친구입니다 :

아래

https://msdn.microsoft.com/en-us/library/cc146404.aspx

예 :

public WqlConnectionManager Connect(string serverName, string userName, string userPassword) 
{ 
    try 
    { 
     SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary(); 
     WqlConnectionManager connection = new WqlConnectionManager(namedValues); 

     if (System.Net.Dns.GetHostName().ToUpper() == serverName.ToUpper()) 
     { 
      // Connect to local computer. 
      connection.Connect(serverName); 
     } 
     else 
     { 
      // Connect to remote computer. 
      connection.Connect(serverName, userName, userPassword); 
     } 

     return connection; 
    } 
    catch (SmsException e) 
    { 
     Console.WriteLine("Failed to Connect. Error: " + e.Message); 
     return null; 
    } 
    catch (UnauthorizedAccessException e) 
    { 
     Console.WriteLine("Failed to authenticate. Error:" + e.Message); 
     return null; 
    } 
} 
+0

링크 전용 답변을 제공하지 마십시오. 링크가 끊어지면 대답은 쓸모가 없습니다. –

+0

요청한대로 Microsoft가 갑자기 사라지거나 지난 8 년간 아무렇지도 않게 그대로 남아있는 기사를 임의로 제거하기로 한 경우 복사 및 붙여 넣은 예제 코드입니다. (농담, 나는 당신의 요지를 얻는다.) – Matt

+0

개인적으로이 Microsoft 예제에 대해 혼란스럽게 생각한 것은 처음에는 AdminUI.WqlQueryEngine.dll 및/또는 Microsoft.ConfigurationManagement.ManagementProvider.dll에 대한 참조가 필요하다는 것입니다. SCCM 콘솔 디렉토리 \ bin에 있습니다. 나는 왜 누군가가 참조를 언급하지 않고 샘플 코드를 게시 하겠지만 MS는 항상 그렇게하는지 모른다. 또한 기본적으로 WMI 호출이고 기본 메서드로 수행 할 수 있기 때문에 항상이 DLL을 예제로 사용하는 이유를 항상 혼란스러워했지만 그냥 숨겨진 점이 있기를 바랬습니다. – Syberdoor