<div>Hmm, I&#39;m getting a different error now.&nbsp; Could it be having trouble passing one wmi object as a parameter to the method of another?</div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">import wmi</font></div>
<div><font face="courier new,monospace">site = &#39;MV1&#39;<br>wmi_server = &#39;mtv-sql-2&#39;<br>resource = 23012</font></div>
<div><font face="courier new,monospace">wmi_namespace = &#39;root\\sms\\site_%s&#39; % site<br>conn = wmi.WMI(computer=wmi_server, namespace=wmi_namespace)<br>coll = conn.Get(&#39;SMS_Collection.CollectionID=&quot;MV100362&quot;&#39;)</font></div>

<div><font face="courier new,monospace">rule = conn.Get(&#39;SMS_CollectionRuleDirect&#39;).SpawnInstance_()<br>rule.ResourceID = resource<br>rule.RuleName = &#39;ResourceID: &#39; +str(resource)<br>rule.ResourceClassName = &#39;SMS_R_System&#39;</font></div>

<div><font face="courier new,monospace">coll.AddMembershipRule(rule)</font></div>
<div>&nbsp;</div>
<div>Gives me : </div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">Traceback (most recent call last):<br>&nbsp; File &quot;C:\Users\timjohnson\Desktop\addrule.py&quot;, line 16, in ?<br>&nbsp;&nbsp;&nbsp; coll.AddMembershipRule(rule)<br>&nbsp; File &quot;C:\Python24\Lib\site-packages\win32com\client\dynamic.py&quot;, line 491, in __getattr__<br>
&nbsp;&nbsp;&nbsp; raise pythoncom.com_error, details<br>pywintypes.com_error: (-2147352567, &#39;Exception occurred.&#39;, (0, &#39;SWbemObjectEx&#39;, &#39;Not found &#39;, None, 0, -2147217406), None)</font></div>
<div>&nbsp;</div>
<div>But this:</div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">import wmi</font></div>
<div><font face="courier new,monospace">site = &#39;MV1&#39;<br>wmi_server = &#39;mtv-sql-2&#39;<br>resource = 23012</font></div>
<div><font face="courier new,monospace">wmi_namespace = &#39;root\\sms\\site_%s&#39; % site<br>conn = wmi.WMI(computer=wmi_server, namespace=wmi_namespace)<br>coll = conn.SMS_Collection(CollectionID=&#39;MV100362&#39;)[0]</font></div>

<div><font face="courier new,monospace">rule = conn.SMS_CollectionRuleDirect.new()<br>rule.ResourceID = resource<br>rule.RuleName = &#39;ResourceID: &#39; +str(resource)<br>rule.ResourceClassName = &#39;SMS_R_System&#39;</font></div>

<div><font face="courier new,monospace">coll.AddMembershipRule(rule)</font></div>
<div>&nbsp;</div>
<div>Gives me:</div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">Traceback (most recent call last):<br>&nbsp; File &quot;C:\Users\timjohnson\Desktop\addrule.py&quot;, line 16, in ?<br>&nbsp;&nbsp;&nbsp; coll.AddMembershipRule(rule)<br>TypeError: __call__() takes exactly 1 argument (2 given)<br>
</font><br><br></div>
<div class="gmail_quote">On Jan 29, 2008 4:51 PM, Tim Johnson &lt;<a href="mailto:tojo2000@gmail.com" target="_blank">tojo2000@gmail.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Thanks, I always forget about makepy (what a terrible name).&nbsp; I&#39;m still relatively new to Python. 
<div>
<div></div>
<div><br><br>
<div class="gmail_quote">On Jan 29, 2008 4:39 PM, Mark Hammond &lt;<a href="mailto:mhammond@skippinet.com.au" target="_blank">mhammond@skippinet.com.au</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div lang="EN-US" vlink="purple" link="blue">
<div>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">I can&#39;t see docs for that property, but if it takes optional params, it might have been transformed to a SetRuleName() method.&nbsp; You could try adding:</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">&nbsp;</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">rule_obj.</span> <span style="FONT-SIZE: 11pt; COLOR: #1f497d">_print_details_()</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">&nbsp;</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">and see what is dumped.&nbsp; Finally, if you can use makepy, the generated file should make it clearer to see what is going on.</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">&nbsp;</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">Cheers,</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">&nbsp;</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">Mark</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">&nbsp;</span></p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: blue 1.5pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none">
<div>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: #b5c4df 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 3pt; BORDER-BOTTOM: medium none">
<p><b><span style="FONT-SIZE: 10pt">From:</span></b><span style="FONT-SIZE: 10pt"> <a href="mailto:python-win32-bounces@python.org" target="_blank">python-win32-bounces@python.org</a> [mailto:<a href="mailto:python-win32-bounces@python.org" target="_blank">python-win32-bounces@python.org</a>] <b>On Behalf Of </b>Tim Johnson<br>
<b>Sent:</b> Wednesday, 30 January 2008 11:18 AM 
<div><br><b>To:</b> <a href="mailto:python-win32@python.org" target="_blank">python-win32@python.org</a><br></div><b>Subject:</b> [python-win32] &quot;Property &#39;%s.%s&#39; can not be set&quot; on read/write attribute</span> 
<p></p>
<p></p>
<p></p></p></div></div>
<div>
<div></div>
<div>
<p>&nbsp;</p>
<div>
<p>So I&#39;m trying to automate some tasks with SMS, and I&#39;ve run into a roadblock when creating new collection membership rules.&nbsp; The code below is a method of a Collection object.&nbsp; It&#39;s a rough draft, so don&#39;t worry too much about the top half unless you think it might be screwing something up.&nbsp; My problem is that I go to create a new SMS_CollectionRuleDirect object (at the bottom of the code provided) and I get the following error:</p>
</div>
<div>
<p>&nbsp;</p></div>
<div>
<p><span>&gt;&gt;&gt; coll.AddMembershipRule(rule)<br>Traceback (most recent call last):<br>&nbsp; File &quot;&lt;stdin&gt;&quot;, line 1, in ?<br>&nbsp; File &quot;H:\p4rootw\lib\ops\sms.py&quot;, line 495, in AddMembershipRule<br>
&nbsp;&nbsp;&nbsp; rule_obj.RuleName = name<br>&nbsp; File &quot;C:\Python24\Lib\site-packages\win32com\client\dynamic.py&quot;, line 550, in __setattr__<br>&nbsp;&nbsp;&nbsp; raise AttributeError, &quot;Property &#39;%s.%s&#39; can not be set.&quot; % (self._username_, attr)</span></p>
</div>
<div>
<p>&nbsp;</p></div>
<div>
<p>If you look in the SMS 2003 SDK v3.1 or here (<a href="http://www.microsoft.com/technet/prodtechnol/sms/sms2003/opsguide/ops_854m.mspx?mfr=true" target="_blank">http://www.microsoft.com/technet/prodtechnol/sms/sms2003/opsguide/ops_854m.mspx?mfr=true</a>) you can see that the property is indeed Read/Write.&nbsp; Is there any way to override this or some workaround that I can use to fix this?&nbsp; I&#39;m about ready to start hopping up and down in my office chair like an angry chimpanzee.</p>
</div>
<div>
<p>&nbsp;</p></div>
<div>
<p>&nbsp;</p></div>
<div>
<p>&nbsp;</p></div>
<div>
<p>&nbsp;</p></div>
<div>
<p>&nbsp;</p></div>
<div>
<p><span># This is a method of an sms.Collection object.</span></p></div>
<div>
<p><span>#</span></p></div>
<div>
<p><span># self.parent.wmi_connection is an object created via wmi.WMI() with the </span></p></div>
<div>
<p><span>#&nbsp;&nbsp; namespace set to </span><a><span>\\server\root\sms\site_S01</span></a><span>, </span></p></div>
<div>
<p><span>#&nbsp;&nbsp; and I can retrieve information fine, as well as add/edit Collection, </span></p></div>
<div>
<p><span>#&nbsp;&nbsp; advertisement, and other objects just fine.</span></p></div>
<div>
<p><span>#</span></p></div>
<div>
<p><span># self.parent.db_connection is an object created via odbc.odbc(), connected to the SMS database</span></p></div>
<div>
<p>&nbsp;</p></div>
<div>
<p><span>&nbsp; def AddMembershipRule(self, rule):<br>&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;Adds a membership rule using an sms.MemberShipRule object.<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Note: this method only supports adding System Resources through direct<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; membership, not User or Group Resources.<br>
&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Args:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rule: an sms.CollectionMembershipRule object<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Raises:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TypeError: if rule is not an sms.CollectionMembershipRule object<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SmsUnsupportedResourceType: if a direct membership rule for a non-system<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resource type is passed<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Returns:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True on Success<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None on Failure<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; TODO: Remove object type limitation for direct membership rules<br>&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;<br>&nbsp;&nbsp;&nbsp; if not isinstance(rule, CollectionMembershipRule):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise TypeError<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; self.parent.ConnectWmi()<br>&nbsp;&nbsp;&nbsp; self.parent.ConnectDb()<br>&nbsp;&nbsp;&nbsp; conn = self.parent.wmi_connection<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if rule.type == &#39;direct&#39;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if rule.resource_type != 5:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise SmsUnsupportedResourceType<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cursor = self.parent.db_connection.cursor()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cursor.execute(&#39;SELECT Netbios_Name0, Name0 from v_R_System &#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;WHERE ResourceID = %s&#39; % rule.resource_id)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; names = cursor.fetchall()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = None<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if names[0]:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = names[0]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = names[1]</span></p></div>
<div>
<p>&nbsp;</p></div>
<div>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # This is the problem section</span></p></div>
<div>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rule_obj = conn.Get(&#39;SMS_CollectionRuleDirect&#39;).SpawnInstance_()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rule_obj.ResourceClassName = &#39;SMS_R_System&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rule_obj.RuleName = name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rule_obj.ResourceID = rule.resource_id<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coll_obj = conn.Get(&#39;SMS_Collection.CollectionID=&quot;%s&quot;&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % self.collection_id)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coll_obj.AddMembershipRule(rule_obj)</span></p></div>
<div>
<p>&nbsp;</p></div>
<div>
<p><br clear="all"><br>-- <br>_____________________<br>Ceci n&#39;est pas un email. </p></div></div></div></div></div></div></blockquote></div><br><br clear="all"><br>-- <br>_____________________<br>Ceci n&#39;est pas un email. </div>
</div></blockquote></div><br><br clear="all"><br>-- <br>_____________________<br>Ceci n&#39;est pas un email.