<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RO Windows Administrators Weblog &#187; VBScript</title>
	<atom:link href="http://www.winadmin.ro/tag/vbscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.winadmin.ro</link>
	<description>Weblogul adminilor de Windows din Romania.</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:33:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Scripting printers on Windows</title>
		<link>http://www.winadmin.ro/2011/11/15/scripting-printers-on-windows/</link>
		<comments>http://www.winadmin.ro/2011/11/15/scripting-printers-on-windows/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 11:45:55 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[Printers]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[WMI]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2011/11/15/scripting-printers-on-windows/</guid>
		<description><![CDATA[Intotdeauna automatizarea instalarii imprimantelor si a tot ce tine de subiectul asta a fost undeva in ceata. Nota:Oricum de cand cu Group Policy Preferences, nici eu nu mai prefer scripturile pentru managementul imprimantelor. Interesant e ca de la Windows 2003 au existat exemple de scripturi incluse chiar in instalarea sistemului de operare: Scripturile de mai [...]]]></description>
			<content:encoded><![CDATA[<p>Intotdeauna automatizarea instalarii imprimantelor si a tot ce tine de subiectul asta a fost undeva in ceata.</p>
<p>Nota:Oricum de cand cu Group Policy Preferences, nici eu nu mai prefer scripturile pentru managementul imprimantelor.</p>
<p>Interesant e ca de la Windows 2003 au existat exemple de scripturi incluse chiar in instalarea sistemului de operare:</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2011/11/image3.png"><img style="border-bottom: 0px;border-left: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2011/11/image_thumb3.png" width="644" height="240" /></a></p>
<p>Scripturile de mai sus sunt incluse in OS – c:\%windir%\system32 in Windows 2003/XP si C:\%windir%\System32\Printing_Admin_Scripts in Windows Vista/7/2008/2008 R2.</p>
<p>De exemplu cu prnmngr.vbs ne putem conecta la o imprimanta partajata de pe un print server.</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2011/11/image4.png"><img style="border-bottom: 0px;border-left: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2011/11/image_thumb4.png" width="644" height="249" /></a></p>
<p>Iar cu prnsrvr.vbs putem extrage informatii despre driverele instalate pe print server (cu parametrul – x se pot identifica si sterge driverele nefolosite).</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2011/11/image5.png"><img style="border-bottom: 0px;border-left: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2011/11/image_thumb5.png" width="404" height="484" /></a></p>
<p>Iar cu prncnfg.vbs putem extrage informatii despre o anumita imprimanta.</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2011/11/image6.png"><img style="border-bottom: 0px;border-left: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2011/11/image_thumb6.png" width="644" height="369" /></a></p>
<p>Celelalte scripturi importante sunt:</p>
<p>- prnjobs.vbs – pentru a interactiona cu print joburile (pauza, resume, cancel jobs)</p>
<p>- prnport.vbs – display and manage TCP/IP printer ports</p>
<p>Scripturile folosesc WMI si pot fi folosite si doar pentru a invata cum sa interactionezi cu imprimantele via VBS/WMI.</p>
<p>Iar in caz ca scripturile nu acopera tot si se doreste mai mult sunt sigur ca o sa gasiti si alte scripturi pentru managementul imprimantelor pe <a href="http://technet.microsoft.com/en-us/scriptcenter/bb410849">Technet Scriptcenter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2011/11/15/scripting-printers-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum sa identifici versiunea de Windows din WMI</title>
		<link>http://www.winadmin.ro/2011/06/07/cum-sa-identifici-versiunea-de-windows-din-wmi/</link>
		<comments>http://www.winadmin.ro/2011/06/07/cum-sa-identifici-versiunea-de-windows-din-wmi/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 08:46:59 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[GPO]]></category>
		<category><![CDATA[OS Version]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[WMI]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/?p=3074</guid>
		<description><![CDATA[Cateodata e necesar sa identifici versiunea de Windows pe care vrei sa ruleze un anumit script, fie ca sunt logon script-uri, fie ca le rulezi manual si ar fi dificil sa cautam intr-un string de caractere cuvinte gen “server”, “XP” sau “Vista”. Pentru asta ne putem folosi de version number si producttype pe care le [...]]]></description>
			<content:encoded><![CDATA[<p>Cateodata e necesar sa identifici versiunea de Windows pe care vrei sa ruleze un anumit script, fie ca sunt logon script-uri, fie ca le rulezi manual si ar fi dificil sa cautam intr-un string de caractere cuvinte gen “server”, “XP” sau “Vista”.</p>
<p>Pentru asta ne putem folosi de version number si producttype pe care le putem obtine via WMI:</p>
<p><strong>Version Number:</strong></p>
<p>Windows Server 2008 R2 or Windows 7  -  6.1%</p>
<p>Windows Server 2008 or Windows Vista  -  6.0%</p>
<p>Windows Server 2003  -  5.2%</p>
<p>Windows XP  -  5.1%</p>
<p>Windows 2000  -  5.0%</p>
<p><strong>Product Type:</strong></p>
<p>Windows Server 2008 R2 or Windows 7  &#8211; 6.1%</p>
<p>Windows Server 2008 or Windows Vista  -  6.0%</p>
<p>Windows Server 2003  -  5.2%</p>
<p>Windows XP  -  5.1%</p>
<p>Windows 2000  -  5.0%</p>
<p><a title="http://technet.microsoft.com/en-us/library/cc754488(WS.10).aspx" href="http://technet.microsoft.com/en-us/library/cc754488(WS.10).aspx">http://technet.microsoft.com/en-us/library/cc754488(WS.10).aspx</a></p>
<p>Iar lucrul asta poate fi foarte util atunci cand vrem sa limitam aplicarea unor GPO-uri doar la anumite OS-uri:</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2011/06/image9.png"><img style="margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://www.winadmin.ro/wp-content/uploads/2011/06/image_thumb9.png" border="0" alt="image" width="461" height="388" /></a></p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2011/06/image10.png"><img style="margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://www.winadmin.ro/wp-content/uploads/2011/06/image_thumb10.png" border="0" alt="image" width="477" height="341" /></a></p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2011/06/image11.png"><img style="margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://www.winadmin.ro/wp-content/uploads/2011/06/image_thumb11.png" border="0" alt="image" width="452" height="344" /></a></p>
<p>Sau daca vrem doar sa influentam modul in care ruleaza un script iata un exemplu care citeste versiunea si tipul OS-ului:</p>
<p>strComputer = &#8220;.&#8221;<br />
Set objWMIService = GetObject(&#8220;winmgmts:&#8221; _<br />
&amp; &#8220;{impersonationLevel=impersonate}!\\&#8221; &amp; strComputer &amp; &#8220;\root\cimv2&#8243;)</p>
<p>Set colOperatingSystems = objWMIService.ExecQuery _<br />
(&#8220;Select * from Win32_OperatingSystem&#8221;)</p>
<p>For Each objOperatingSystem in colOperatingSystems<br />
Wscript.Echo objOperatingSystem.Caption &amp; &#8221; &#8221; &amp; _<br />
objOperatingSystem.Version &amp; &#8220;    &#8221; &amp; objOperatingSystem.ProductType</p>
<p>Next</p>
<p>&nbsp;</p>
<p>Restul tine doar de imaginatia voastra. Pentru alte detalii ma gasiti pe <a href="http://forum.winadmin.ro">forum</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2011/06/07/cum-sa-identifici-versiunea-de-windows-din-wmi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum sa inveti VBScript</title>
		<link>http://www.winadmin.ro/2011/03/13/cum-sa-inveti-vbscript/</link>
		<comments>http://www.winadmin.ro/2011/03/13/cum-sa-inveti-vbscript/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 15:51:03 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2011/03/13/cum-sa-inveti-vbscript/</guid>
		<description><![CDATA[VBScript (Visual Basic Scripting Edition) inca se mai foloseste la greu, si poate rezolva inca multe probleme cu toate ca e cumva depasit (de Powershell).&#160; Chiar daca in majoritatea timpului la job nu aveti nevoie sa faceti scripturi, sunt multe cazuri in care trebuie sa modifici/adaptezi un script existent, care fie vine cu vreo aplicatie, [...]]]></description>
			<content:encoded><![CDATA[<p>VBScript (Visual Basic Scripting Edition) inca se mai foloseste la greu, si poate rezolva inca multe probleme cu toate ca e cumva depasit (de Powershell).&#160; Chiar daca in majoritatea timpului la job nu aveti nevoie sa faceti scripturi, sunt multe cazuri in care trebuie sa modifici/adaptezi un script existent, care fie vine cu vreo aplicatie, fie il descarcati de pe net.</p>
<p>Nota: Daca esti incepator si nu stii pe ce drum sa o apuci, iti recomand Powershell. Poate parea putin mai complicat decat VBScript insa este de viitor. Poti sa incepi de <a href="http://technet.microsoft.com/en-us/scriptcenter/dd793612.aspx">aici</a>.</p>
<p>Acum daca stii ca inca mai ai de lucru cu VBS-uri si o sa te lovesti de ele, e bine sa stii si putin VBScript. Ca sa-ti faci o idee aici ai o privire din avion asupra VBScript:</p>
<p><a title="http://technet.microsoft.com/en-us/scriptcenter/dd940112" href="http://technet.microsoft.com/en-us/scriptcenter/dd940112">http://technet.microsoft.com/en-us/scriptcenter/dd940112</a></p>
<p>Si daca te decizi sa continui, iti recomand Windows 2000 Scripting Guide (in continuare cea mai buna cale de a invata VBScript pentru administrare):</p>
<p><a title="http://technet.microsoft.com/en-us/library/ee221103.aspx" href="http://technet.microsoft.com/en-us/library/ee221103.aspx">http://technet.microsoft.com/en-us/library/ee221103.aspx</a></p>
<p>Gasesti aici o gramada de exemple mapate pe diverse task-uri de administrare. Ghidul e util cateodata si doar pentru a gasi exemple de scripturi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2011/03/13/cum-sa-inveti-vbscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create AD users from CSV&#8211;VBScript edition</title>
		<link>http://www.winadmin.ro/2011/01/17/create-ad-users-from-csvvbscript-edition/</link>
		<comments>http://www.winadmin.ro/2011/01/17/create-ad-users-from-csvvbscript-edition/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 09:13:41 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Add Users to AD]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2011/01/17/create-ad-users-from-csvvbscript-edition/</guid>
		<description><![CDATA[Cu toate ca toata lumea acum se da in vant dupa Powershell si nu mai accepta altceva, eu sunt de parere ca e bine sa folosesti ce stii mai bine. Iar eu de exemplu stiu vbscript mai bine decat Powershell. O sa revin si cu varianta Powershell, insa azi o sa postez un exemplu de [...]]]></description>
			<content:encoded><![CDATA[<p>Cu toate ca toata lumea acum se da in vant dupa Powershell si nu mai accepta altceva, eu sunt de parere ca e bine sa folosesti ce stii mai bine. Iar eu de exemplu stiu vbscript mai bine decat Powershell.</p>
<p>O sa revin si cu varianta Powershell, insa azi o sa postez un exemplu de script care citeste o lista de useri dintr-un fisier formatat CSV si ii adauga in Active Directory.</p>
<p>Scriptul seteaza si parola pe userii respectivi si ii si activeaza.</p>
<blockquote><p>on error resume next</p>
<p>Const ForReading = 1</p>
<p>Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)     <br />Set objTextFile = objFSO.OpenTextFile(&quot;d:\lista_useri.csv&quot;, ForReading)</p>
<p>Do While objTextFile.AtEndOfStream &lt;&gt; True     <br /> strLine = objtextFile.ReadLine      <br /> If inStr(strLine, &quot;,&quot;) Then      <br />&#160;&#160;&#160; arrUserRecord = split(strLine, &quot;,&quot;)      <br />&#160;&#160;&#160; cnUser = &quot;cn=&quot; &amp; arruserRecord(0)      <br />&#160;&#160;&#160; SAM = arrUserRecord(1)      <br />&#160;&#160;&#160; GivenName = arrUserRecord(2)      <br />&#160;&#160;&#160; surname = arrUserRecord(3)</p>
<p>&#160;&#160;&#160; Set objOU = GetObject(&quot;LDAP://ou=Useri,OU=Test,dc=winadmin,dc=local&quot;)     <br />&#160;&#160;&#160; Set objUser = objOU.Create(&quot;User&quot;, cnUser)      <br />&#160;&#160;&#160; objUser.Put &quot;sAMAccountName&quot;, SAM      <br />&#160;&#160;&#160; objUser.Put &quot;givenName&quot;, GivenName      <br />&#160;&#160;&#160; objUser.Put &quot;sn&quot;, surname      <br />&#160;&#160;&#160; objUser.Put &quot;userPrincipalName&quot;, SAM      <br />&#160;&#160;&#160; objUser.SetInfo</p>
<p>&#160;&#160;&#160; objuser.SetPassword &quot;P@ssw0rd&quot;     <br />&#160;&#160;&#160; objUser.Put &quot;userAccountControl&quot;, 512      <br />&#160;&#160;&#160; objUser.SetInfo</p>
<p>&#160;&#160;&#160; Wscript.echo cnUser &amp; &quot;&#160;&#160;&#160; user account created.&quot;</p>
<p> End If      <br />Loop</p>
</blockquote>
<p><font>Dupa cum se vede, merge modificat foarte usor si pot fi adaugate mai multe atribute (prin metoda Put) iar scriptul merge modificat ca sa citeasca parola tot din CSV. Atentie ca e nevoie de doua ori de metoda SetInfo altfel nu o sa reusiti sa activati userul.</font></p>
<p><font>PS: Scriptul nu face error handling si are activat si on error resume next, asa ca mare atentie atunci cand importati cantitati mari de date.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2011/01/17/create-ad-users-from-csvvbscript-edition/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cum sa afli serialul folosit la instalarea Windows-ului</title>
		<link>http://www.winadmin.ro/2011/01/12/cum-sa-afli-serialul-folosit-la-instalarea-windows-ului/</link>
		<comments>http://www.winadmin.ro/2011/01/12/cum-sa-afli-serialul-folosit-la-instalarea-windows-ului/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 05:00:00 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Windows Client]]></category>
		<category><![CDATA[Serial]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[Windows Key]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2011/01/12/cum-sa-afli-serialul-folosit-la-instalarea-windows-ului/</guid>
		<description><![CDATA[Inca de pe vremea XP-ului a aparut aceasta intrebare si foarte cunoscut e Magical Jelly Bean Keyfinder care merge foarte bine. Chiar de curand l-am folosit sa verific ce serial aveam pe un anumit server – 2003, pe altceva nu l-am incercat. Merge chiar sa afli serialul unui sistem remote. Totusi un simplu vbscript sau [...]]]></description>
			<content:encoded><![CDATA[<p>Inca de pe vremea XP-ului a aparut aceasta intrebare si foarte cunoscut e <a href="http://www.magicaljellybean.com/keyfinder/">Magical Jelly Bean Keyfinder</a> care merge foarte bine. Chiar de curand l-am folosit sa verific ce serial aveam pe un anumit server – 2003, pe altceva nu l-am incercat. Merge chiar sa afli serialul unui sistem remote.</p>
<p>Totusi un simplu vbscript sau powershell script poate rezolva problema. Si e mai util pentru ca il poti lega la un script mai mare sau aplicatie care culege date din enterprise.</p>
<p>Nu are rost sa repostez eu ce au facut altii. Detalii despre subiect si despre cum puteti culege si serialele altor produse gasiti aici:</p>
<p><a title="http://www.visualbasicscript.com/Retrieve-Windows-Product-Key-m42793.aspx" href="http://www.visualbasicscript.com/Retrieve-Windows-Product-Key-m42793.aspx">http://www.visualbasicscript.com/Retrieve-Windows-Product-Key-m42793.aspx</a></p>
<p>O copie a scriptului care culege datele de pe Windows si care merge inclusiv pe Windows 7 am uploadat si pe Winadmin.</p>
<p><a href="http://www.winadmin.ro/files/findkey.zip">http://www.winadmin.ro/files/findkey.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2011/01/12/cum-sa-afli-serialul-folosit-la-instalarea-windows-ului/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum pot detecta cand cineva imi modifica grupul Domain Admins?</title>
		<link>http://www.winadmin.ro/2010/02/17/cum-pot-detecta-cand-cineva-imi-modifica-grupul-domain-admins/</link>
		<comments>http://www.winadmin.ro/2010/02/17/cum-pot-detecta-cand-cineva-imi-modifica-grupul-domain-admins/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 05:00:00 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[Domain Admins]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2010/02/17/cum-pot-detecta-cand-cineva-imi-modifica-grupul-domain-admins/</guid>
		<description><![CDATA[&#160; WMI?VBScript? Ne folosim de un exemplu de script de pe “Hey! Scripting guy!” care ne ajuta sa cautam in textul dintr-un event si de modelul de script descris in articolul de aici. In prima etapa scriptul monitorizeaza aparitia oricarui eveniment cu ID-ul 641 Set colMonitoredEvents = objWMIService.ExecNotificationQuery _&#160;&#160;&#160; &#160;&#160;&#160; (&#34;Select * from __InstanceCreationEvent Where [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>WMI?VBScript?</p>
<p>Ne folosim de un exemplu de script de pe <a href="http://blogs.technet.com/heyscriptingguy/archive/2007/02/26/how-can-i-monitor-event-log-messages-for-specific-words.aspx">“Hey! Scripting guy!”</a> care ne ajuta sa cautam in textul dintr-un event si de modelul de script descris in articolul de <a href="http://www.winadmin.ro/2010/02/16/cum-monitorizez-aparitia-unui-anumit-event-id-in-loguri-vbswmi-version/">aici</a>.</p>
<p>In prima etapa scriptul monitorizeaza aparitia oricarui eveniment cu ID-ul 641</p>
<blockquote><p>Set colMonitoredEvents = objWMIService.ExecNotificationQuery _&#160;&#160;&#160; <br />&#160;&#160;&#160; (&quot;Select * from __InstanceCreationEvent Where &quot; _       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp; &quot;TargetInstance ISA &#8216;Win32_NTLogEvent&#8217; &quot; _       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp; &quot;and TargetInstance.EventCode = &#8217;641&#8242; &quot;)</p>
</blockquote>
<p>Urmand ca apoi sa caute un corpul mesajului textul “domain admins”.</p>
<blockquote><p>If InStr(LCase(objLatestEvent.TargetInstance.Message), &quot;domain admins&quot;) Then     <br />&#160;&#160;&#160; Wscript.Echo &quot;Message: &quot; &amp; objLatestEvent.TargetInstance.Message      <br />End If</p>
</blockquote>
<p>Intreg scriptul il gasiti mai jos:</p>
<blockquote><p>strComputer = &quot;.&quot; </p>
<p>Set objWMIService = GetObject(&quot;winmgmts:{(Security)}\\&quot; &amp; _     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; strComputer &amp; &quot;\root\cimv2&quot;) </p>
<p>Set colMonitoredEvents = objWMIService.ExecNotificationQuery _&#160;&#160;&#160; <br />&#160;&#160;&#160; (&quot;Select * from __InstanceCreationEvent Where &quot; _      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp; &quot;TargetInstance ISA &#8216;Win32_NTLogEvent&#8217; &quot; _      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp; &quot;and TargetInstance.EventCode = &#8217;641&#8242; &quot;) </p>
<p>Do     <br />&#160;&#160;&#160; Set objLatestEvent = colMonitoredEvents.NextEvent      <br />&#160;&#160;&#160; If InStr(LCase(objLatestEvent.TargetInstance.Message), &quot;domain admins&quot;) Then      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Wscript.Echo &quot;Message: &quot; &amp; objLatestEvent.TargetInstance.Message      <br />&#160;&#160;&#160; End If </p>
<p>Loop</p>
<p>&#160;</p>
</blockquote>
<p>Iata ce se intampla cand il rulam si modificam grupul Domain Admins.</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2010/02/image61.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2010/02/image_thumb22.png" width="644" height="435" /></a> </p>
<p>Ca actiune in cazul modificarii unui event doar afisam un text in cazul scriptului de mai sus, insa actiunea potrivita ar fi generarea si trimiterea unui email pentru a avertiza administratorul (dar asta alta data).</p>
<p>Pentru o mai buna protectie e bine sa monitorizam si grupurile Administrators, Enterprise Admins, Schema Admins (chiar si Backup &amp; Server Operators ar fi bine).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2010/02/17/cum-pot-detecta-cand-cineva-imi-modifica-grupul-domain-admins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Searching for delegated rights in AD</title>
		<link>http://www.winadmin.ro/2009/12/08/searching-for-delegated-rights-in-ad/</link>
		<comments>http://www.winadmin.ro/2009/12/08/searching-for-delegated-rights-in-ad/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 06:05:00 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/?p=274</guid>
		<description><![CDATA[&#160; Scopul scriptului care il voi prezenta mai jos este de a cauta in Active Directory dupa delegarile facute la nivel de Organizational Unit-uri. Intr-un domeniu in care facem delegari pentru alti admini, daca acestea nu sunt documentate si sunt facute folosind useri si nu de grupuri, in timp sunt uitate iar userul va avea [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Scopul scriptului care il voi prezenta mai jos este de a cauta in Active Directory dupa delegarile facute la nivel de Organizational Unit-uri. Intr-un domeniu in care facem delegari pentru alti admini, daca acestea nu sunt documentate si sunt facute folosind useri si nu de grupuri, in timp sunt uitate iar userul va avea acces in continuare la resursele delegate chiar daca nu face parte din grupurile de administratori.</p>
<p>Scriptul arata cam asa:</p>
<blockquote><p>&#8216;Script created by Andrei Ungureanu      <br />&#8216;www.winadmin.ro </p>
<p>On error resume next      <br />Const ADS_SCOPE_SUBTREE = 2       <br />Const ADS_ACEFLAG_INHERITED_ACE = &amp;H10 </p>
<p>Set objConnection = CreateObject(&quot;ADODB.Connection&quot;)      <br />Set objCommand =&#160;&#160; CreateObject(&quot;ADODB.Command&quot;)       <br />objConnection.Provider = &quot;ADsDSOObject&quot;       <br />objConnection.Open &quot;Active Directory Provider&quot; </p>
<p>Set objCOmmand.ActiveConnection = objConnection      <br />objCommand.CommandText = _       <br />&#160;&#160;&#160; &quot;Select Name, distinguishedName from &#8216;LDAP://DC=itboard,DC=local&#8217; &quot; _       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp; &quot;Where objectClass=&#8217;organizationalUnit&#8217;&quot;&#160; <br />objCommand.Properties(&quot;Page Size&quot;) = 1000       <br />objCommand.Properties(&quot;Searchscope&quot;) = ADS_SCOPE_SUBTREE       <br />Set objRecordSet = objCommand.Execute       <br />objRecordSet.MoveFirst </p>
<p>Do Until objRecordSet.EOF      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; strOU = objRecordSet.Fields(&quot;distinguishedName&quot;)&#160; <br />Set ObjUser = GetObject(&quot;LDAP://&quot; &amp; strOU)       <br />Set objsd = objUser.Get(&quot;ntSecurityDescriptor&quot;)       <br />Set dacl = objsd.DiscretionaryAcl </p>
<p>For Each ace In dacl      <br />If ace.Trustee = &quot;ITBOARD\andreiu&quot; Then       <br />&#160;&#160;&#160; iAceFlags = ace.AceFlags </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; If(iAceFlags And ADS_ACEFLAG_INHERITED_ACE)Then      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Exit For       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; End If </p>
<p>&#160;&#160;&#160; wscript.echo strOU      <br />&#160;&#160;&#160; Exit For       <br />End If       <br />next </p>
<p>&#160;&#160;&#160; objRecordSet.MoveNext      <br />Loop</p>
</blockquote>
<p>E nevoie sa inlocuiti in script ITBOARD\andreiu cu userul pe care il cautati si la fel numele domeniului din dc=itboard,dc=local in numele domeniului pe care rulati scriptul. Scriptul va verifica toata ierarhia de OU-uri si va afisa doar locatiile in care userul are permisiuni (daca exista deja permisiuni mostenite de la un OU parinte nu va mai verifica alte permisiuni pe acel OU).</p>
<p>Atentie ca numele userului si domeniul sunt case sensitive. Acestea trebuie puse in script exact asa cum apar in proprietatile userului:</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2009/12/image.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2009/12/image_thumb.png" width="406" height="484" /></a> </p>
<p>Scriptul nu este bullet proof si e posibila sa existe cazuri in care sa nu detecteze tot. Pentru a-i imbunatati viteza am decis sa fac skip la OU-urile unde exista deja drepturi mostenite pentru acel user.</p>
<p>PS: Atentie ca scripturile postate aici sunt modificate de wordpress si anumite caractere trebuie modificate de mana cand faceti copy/paste la script.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2009/12/08/searching-for-delegated-rights-in-ad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum verificam bifa “Allow inheritable permissions” (in Active Directory)</title>
		<link>http://www.winadmin.ro/2009/11/24/cum-verificam-bifa-allow-inheritable-permissions-in-active-directory/</link>
		<comments>http://www.winadmin.ro/2009/11/24/cum-verificam-bifa-allow-inheritable-permissions-in-active-directory/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 23:08:22 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Delegation]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2009/11/24/cum-verificam-bifa-allow-inheritable-permissions-in-active-directory/</guid>
		<description><![CDATA[&#160; Stiu ca foarte multi administratori de Active Directory s-au lovit de problema asta. In special cand preiei administrarea unui domeniu de la altcineva sau cand obiectele care le ai in domeniul tau au venit printr-o migrare. Bifa din imaginea de mai jos se refera la mostenirea permisiunilor de pe containerul care contine obiectul (sau [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Stiu ca foarte multi administratori de Active Directory s-au lovit de problema asta. In special cand preiei administrarea unui domeniu de la altcineva sau cand obiectele care le ai in domeniul tau au venit printr-o migrare.</p>
<p>Bifa din imaginea de mai jos se refera la mostenirea permisiunilor de pe containerul care contine obiectul (sau pot fi mai multe nu numai unul).</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2009/11/image34.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2009/11/image_thumb33.png" width="570" height="484" /></a> </p>
<p>E nevoie ca aceste permisiuni sa se propage la obiectele din container, pentru ca la nivel de container se fac delegarile de permisiuni. Sa luam exemplul in care delegam permisiunea de a reseta parole unui admin regional pentru toti userii care se afla intr-o anumita locatie, mai exact toti userii care se afla intr-un anumit container (OU).</p>
<p><a href="http://www.winadmin.ro/wp-content/uploads/2009/11/image35.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="image" src="http://www.winadmin.ro/wp-content/uploads/2009/11/image_thumb34.png" width="558" height="484" /></a> </p>
<p>Daca obiectele din containerul meu nu au bifa de care pomeneam mai sus activa, delegarea nu o sa functioneze. By default bifa e activa, insa pe parcursul vietii unui obiect in AD, se poate schimba. Cateodata poate fi facuta manual sau de anumite procese – gen cazul cand un user este adaugat in grupul Domain Admins, iar cand este scos nu este pusa la loc.</p>
</p>
<p>&#160;</p>
<p>Cum putem sa fortam activarea acestei bife sau sa vedem daca este activa? In cazul unui singur utilizator e simplu, problema apare atunci cand avem zeci sau sute de utilizatori (poate chiar mai multi dar ne oprim aici) de modificat sau verificat.</p>
<p>Ca de obicei VBScript ne sare in ajutor. Mai jos avem un exemplu de script care verifica toti userii dintr-un anumit OU din AD si activeaza optiunea <em>Allow inheritable permissions</em>.</p>
<p>&#160;</p>
<blockquote><p>&#8216;Script created by Andrei Ungureanu     <br />&#8216;www.winadmin.ro </p>
<p>On Error Resume Next </p>
<p>Const ADS_SCOPE_SUBTREE = 2     <br />Const SE_DACL_PROTECTED = 0 </p>
<p>Set objConnection = CreateObject(&quot;ADODB.Connection&quot;)     <br />Set objCommand =&#160;&#160; CreateObject(&quot;ADODB.Command&quot;)      <br />objConnection.Provider = &quot;ADsDSOObject&quot;      <br />objConnection.Open &quot;Active Directory Provider&quot;      <br />Set objCommand.ActiveConnection = objConnection </p>
<p>objCommand.Properties(&quot;Size Limit&quot;)= 10000 </p>
<p>objCommand.Properties(&quot;Page Size&quot;) = 10000     <br />objCommand.Properties(&quot;Searchscope&quot;) = ADS_SCOPE_SUBTREE </p>
<p>objCommand.CommandText = _     <br />&quot;&lt;LDAP://ou=accounts,dc=itboard,dc=local&gt;;&quot;_      <br />&amp; &quot;(objectCategory=user);sAMAccountName,distinguishedname;subtree&quot;</p>
<p>Set objRecordSet = objCommand.Execute </p>
<p>objRecordSet.MoveFirst     <br />Do Until objRecordSet.EOF </p>
<p> userDN = objRecordSet.Fields(&quot;distinguishedName&quot;).Value     <br /> set objObject = getobject(&quot;LDAP://&quot; &amp; userDN &amp; &quot;&quot;)      <br /> Set objntSD = objObject.Get(&quot;nTSecurityDescriptor&quot;) </p>
<p> intNTSDControl = objNtSD.Control </p>
<p> If intNTSDControl &lt;&gt; 35844 Then     <br />&#160;&#160;&#160; &#8216; Enable &quot;allow inheritable permissions&quot;.      <br />&#160;&#160;&#160; intNTSDControl = intNTSDControl And SE_DACL_PROTECTED      <br />&#160;&#160;&#160; objntSD.Control = intNTSDControl      <br />&#160;&#160;&#160; objObject.Put &quot;nTSecurityDescriptor&quot;, objntSD      <br />&#160;&#160;&#160; objObject.SetInfo      <br />&#160;&#160;&#160; WScript.Echo &quot;Obiectul &quot; &amp; userDN &amp; &quot; a fost modificat&quot;      <br /> End If </p>
<p> objRecordSet.MoveNext     <br />Loop</p>
</blockquote>
<p>Calea <a href="//ou=accounts,dc=itboard,dc=local">LDAP://ou=accounts,dc=itboard,dc=local</a> trebuie inlocuita cu locatia in care avem obiectele ce trebuiesc scanate. Merge specificat chiar si domain root insa nu recomand asa ceva. Recomand ca inainte sa folositi scriptul, sa il verificati pe un mediu de test.</p>
<p>PS: scriptul merge modificat foarte usor si doar pentru a arata starea bifei <em>Allow inheritable permissions</em>.</p>
<p><font>&#160;</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2009/11/24/cum-verificam-bifa-allow-inheritable-permissions-in-active-directory/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cum schimbi IP Settings din script</title>
		<link>http://www.winadmin.ro/2009/10/14/cum-schimbi-ip-settings-din-script/</link>
		<comments>http://www.winadmin.ro/2009/10/14/cum-schimbi-ip-settings-din-script/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 16:57:12 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2009/10/14/cum-schimbi-ip-settings-din-script/</guid>
		<description><![CDATA[Chiar merge, nu e nevoie sa te duci pana la consola sistemului ca sa-i schimbi IP-ul, sa-l treci pe DHCP sau sa-i schimbi setarile pentru DNS/WINS. Merge din script. Si pentru ca majoritatea scripturilor pe care le folosesc sunt scrise in VBS o sa continui tot asa (pentru moment, ca studiez Powershell si Python). &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Chiar merge, nu e nevoie sa te duci pana la consola sistemului ca sa-i schimbi IP-ul, sa-l treci pe DHCP sau sa-i schimbi setarile pentru DNS/WINS. Merge din script. Si pentru ca majoritatea scripturilor pe care le folosesc sunt scrise in VBS o sa continui tot asa (pentru moment, ca studiez Powershell si Python).</p>
<p>&#160;</p>
<p>Un exemplu pentru folosirea acestui script ar fi un subnet cu ip-uri puse static si unde trebuie sa schimbi adresa serverului de DNS la toate sistemele. Sau un sistem setat cu IP static pe care vrei sa-l treci pe DHCP. Hai sa vedem si cateva exemple.</p>
<p>Cand pentru numele calculatorului folosim “.” inseamna ca ne conectam la sistemul local. Scriptul urmator trece pe DHCP toate adaptoarele de retea care au TCP/IP activat:</p>
<p><font color="#ff0000">strComputer = &quot;.&quot;      <br />set objWMIService = GetObject(&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)       <br />Set colItems = objWMIService.ExecQuery(&quot;Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = 1&quot;) </font></p>
<p><font color="#ff0000">For Each objItem in colItems      <br />&#160;&#160;&#160; If objItem.DHCPEnabled = False then       <br />&#160;&#160;&#160;&#160;&#160; errDHCP = objItem.EnableDHCP()</font></p>
<p><font color="#ff0000">&#160;&#160;&#160;&#160;&#160; errDNS = objItem.SetDNSServerSearchOrder()&#160; <br />&#160;&#160;&#160; End If       <br />Next</font></p>
<p>&#160;</p>
<p>Bun. Acum sa luam cazul in care vrem sa trecem de pe DHCP pe IP fix. Pentru asta folosim metoda EnableStatic care primeste 2 parametri IP Address si Subnet Mask sub forma:</p>
<p><font color="#ff0000">errStaticIP = objItem.EnableStatic(array(“192.168.0.10”),array(”255.255.255.0”))</font></p>
<p><font color="#ff0000">errDNS = objItem.SetDNSServerSearchOrder(array(“192.168.0.100, 192.168.0.101”))</font>&#160;</p>
<p>Ce altceva mai putem sa setam? WINS de exemplu:</p>
<p><font color="#ff0000">errWins = objItem.SetWINSServer (array(“192.168.0.100, 192.168.0.101”))</font></p>
<p>Pe scurt, puteti seta cam orice legat de configuratia TCP/IP prin script. Chiar si combinatii mai ciudate cu IP luat prin DHCP si DNS pus manual. Unul din scripturile facute in ultimul timp (pe genunchi) se conecta la toata sistemele dintr-un anumit subnet si imi dadea informatii despre clientul de DHCP: cand si-a luat IP ultima data, cand expira leaseul, de la ce server si-a luat IP, etc.</p>
<p>Concluzie: daca trebuie sa treceti o retea intreaga pe DHCP nu e nevoie sa vizitati fiecare calculator in parte. Merge si remote.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2009/10/14/cum-schimbi-ip-settings-din-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cum trimitem parametri unui VBScript</title>
		<link>http://www.winadmin.ro/2009/10/09/cum-trimitem-parametri-unui-vbscript/</link>
		<comments>http://www.winadmin.ro/2009/10/09/cum-trimitem-parametri-unui-vbscript/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 14:22:00 +0000</pubDate>
		<dc:creator>Andrei Ungureanu</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.winadmin.ro/2009/10/09/cum-trimitem-parametri-unui-vbscript/</guid>
		<description><![CDATA[Daca ne-am plictisit sa modificam scripturile de fiecare data pentru a specifica numele serverului sau locul unde e lista, exista si o varianta mai buna. Porninrea scriptului cu parametri. Pentru asta folosim colectia WScript.Arguments. Si putem verifica daca au fost specificati parametri folosing proprietatea Count: arguments = WScript.Arguments.Count Urmand a face si o verificare: If [...]]]></description>
			<content:encoded><![CDATA[<p>Daca ne-am plictisit sa modificam scripturile de fiecare data pentru a specifica numele serverului sau locul unde e lista, exista si o varianta mai buna. Porninrea scriptului cu parametri.</p>
<p>Pentru asta folosim colectia WScript.Arguments. Si putem verifica daca au fost specificati parametri folosing proprietatea Count:</p>
<p>arguments = WScript.Arguments.Count</p>
<p>Urmand a face si o verificare:</p>
<p>If arguments &lt; 1 then    <br />&#160; WScript.Echo “Ati uitat sa specificati parametrii. Exemplu: cscript script.vbs [parametru]”     <br />&#160; WScript.Quit     <br />end If</p>
<p>Daca se trece mai departe de conditia If putem sa citim parametrii:</p>
<p>param1 = WScript.Arguments.Item(0)</p>
<p>Wscript.Echo param1</p>
<p>Daca avem mai multi citim si celelalte obiecte din colectie ex:WScript.Arguments.Item(1) (ati prins ideea).</p>
<p>&#160;</p>
<p>PS: by default scripturile sunt rulate folosind Wscript.exe atunci cand pornesti scriptul din Explorer. (comportamentul default merge modificat) Recomandat e sa rulati scripturile folosind Cscript.exe (ex: cscript myscript.vbs parametru) pentru a primi output-ul in fereastra din care ati lansat scriptul si pentru a-l putea redirecta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.winadmin.ro/2009/10/09/cum-trimitem-parametri-unui-vbscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

