<?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>Blog de Sys Admin</title>
	<atom:link href="https://blog.developpez.com/sysadmin/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/sysadmin</link>
	<description></description>
	<lastBuildDate>Wed, 22 Jun 2011 20:07:22 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Mini Boite à outils Powershell</title>
		<link>https://blog.developpez.com/sysadmin/p10089/powershell/mini_boite_a_outils_powershell</link>
		<comments>https://blog.developpez.com/sysadmin/p10089/powershell/mini_boite_a_outils_powershell#comments</comments>
		<pubDate>Wed, 22 Jun 2011 20:07:22 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[Active-Directory]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[C&#8217;est au fur et à mesure,en jouant avec powershell que j&#8217;ai noté et gardé ces bricoles&#8230; Si ça crame, ces p&#8217;tits scripts, scriptlets ou commandlet seront au moins sauvés ici &#8230; Accès à une clé de Registre &#160;$key= get-item &#34;HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\&#34; A noter : en Powershell, le registre est considéré comme un lecteur &#171;&#160;logique&#160;&#187; (type C:\) d&#8217;où la syntaxe HKLM:\ &#8230; Accès à une propriété d&#8217;une clé de Registre $key= get-item &#34;HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ $val= get-itemProperty [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>C&rsquo;est au fur et à mesure,en jouant avec powershell que j&rsquo;ai noté et gardé ces bricoles&#8230;<br />
Si ça crame, ces p&rsquo;tits scripts, scriptlets ou commandlet seront au moins sauvés ici &#8230;<br />
<span id="more-6"></span></p>
<h2>Accès à une clé de Registre</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;$key= get-item &quot;HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\&quot;</div></div>
<p>A noter : en Powershell, le registre est considéré comme un lecteur &laquo;&nbsp;logique&nbsp;&raquo; (type C:\) d&rsquo;où la syntaxe <strong>HKLM:\</strong> &#8230; </p>
<h2>Accès à une propriété d&rsquo;une clé de Registre</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$key= get-item &quot;HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ <br />
$val= get-itemProperty $key.PSPath |select ProductName</div></div>
<p>A noter : la propriété .pspath est indispensable pour bypass le chemin &laquo;&nbsp;physique&nbsp;&raquo; (exemple <em>c:\documents and settings</em>&#8230;) par défaut.<br />
La partie &laquo;&nbsp;|select&#8230;&nbsp;&raquo; est optionnelle, elle permet de ne récuperer que certaines propriétés ( select étant un alias de select-object) </p>
<h2>Liste des pilotes d&rsquo;impression installés</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$liste=@() #important : pour creer un tableau <br />
$collection =Get-WmiObject win32_Printerdriver | select name,version, supportedplatform <br />
foreach ($drivers in $collection) <br />
{ $liste+=($drivers.name -split &quot;,&quot;)[0]} <br />
$liste</div></div>
<h2>Création unitaire d&rsquo;une file d&rsquo;impression</h2>
<p><em>Ce script n&rsquo;installe aucun pilote, il se contente de créer, partager et publier dans l&rsquo;AD une file correspondant aux variables renseignées&#8230;</em><br />
<em>Gros pré-requis : connaitre le libellé </em><strong>exact</strong><em> du pilote que l&rsquo;on va utiliser ! cf script précédent&#8230;</em></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$Name=&quot;IMP-machintruc&quot; <br />
$Comment=&quot;Patati...&quot; <br />
$Emplacement=&quot;Bureau XXX&quot; <br />
$DriverName = &quot;Lexmark Universal XL&quot; #&lt;== Tres important !! <br />
$IPAddress = &quot;192.168.XXX.XXX&quot; <br />
$PortName = &quot;Port-IPXXX&quot; <br />
&nbsp;<br />
# creation du port <br />
$ClassIPPrnPort= [wmiclass]'Win32_TCPIPPrinterPort' <br />
$NewPort= $ClassIPPrnPort.CreateInstance() &nbsp; &nbsp; <br />
$NewPort.HostAddress = $IPAddress <br />
$NewPort.Name = $PortName <br />
&nbsp;$NewPort.Protocol = 1 # &nbsp;1 = Raw, 2 = LPR <br />
$NewPort.SNMPEnabled = $false <br />
$ResultPort=$NewPort.Put() <br />
&nbsp;<br />
# ajout de la file <br />
$ClassPrinter= [wmiclass]'Win32_Printer' <br />
$NewPrinter= $ClassPrinter.CreateInstance() <br />
$NewPrinter.DriverName = $DriverName <br />
$NewPrinter.DeviceID = $Name <br />
$NewPrinter.PortName = $PortName <br />
$newprinter.Shared = $true <br />
$newprinter.Published = $true <br />
$newprinter.Sharename = $Name <br />
$newprinter.Location = $Emplacement <br />
$newprinter.Comment = $Comment <br />
&nbsp;<br />
$ResultPrinter=$NewPrinter.Put()</div></div>
<h2>Liste des services arrêtés d&rsquo;une machine distante</h2>
<p><em>Aussi connu sous le nom : le &laquo;&nbsp;ça ressemble à un &lsquo;ps pipe grep'&nbsp;&raquo;</em></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">get-service -computername &quot;ordXXXX&quot; | where {$_.status -eq &quot;stopped&quot; }</div></div>
<h2>Parcours d&rsquo;un tableau, concaténation et transtypage</h2>
<p><em>Parcours du tableau $var contenant les valeurs 0 1 2 3 4</em></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$var=0..4;$result=&quot;&quot;;$result=@() ; foreach ($val in $var) {$result+=[int]([string]$val + &quot;01&quot;);}</div></div>
<p>Bien initialiser la variable $result en tant que tableau.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mini boite à outils VBS</title>
		<link>https://blog.developpez.com/sysadmin/p10078/vbs/mini_boite_a_outils_vbs</link>
		<comments>https://blog.developpez.com/sysadmin/p10078/vbs/mini_boite_a_outils_vbs#comments</comments>
		<pubDate>Tue, 21 Jun 2011 17:16:22 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[vbs]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[C&#8217;est pas toujours malin ni très folichon de réinventer le fil à couper la roue tiède, lors de la mise en service de scripts basiques et utilitaires&#8230; Cela dit, il est commode d&#8217;avoir sous la main les briques principales, quelques grandes fonctions très récurrentes (manips de fichiers, etc) en vbs Grosso modo, le genre de manipulations qui font apprécier powershell&#8230; Envoi de mail set msg = CreateObject(&#34;CDO.message&#34;) &#160; msg.Configuration.Fields.Item(&#34;http://schemas.microsoft.com/cdo/configuration/sendusing&#34;) = 2 &#160; msg.Configuration.Fields.Item(&#34;http://schemas.microsoft.com/cdo/configuration/smtpserver&#34;) = &#34;smtp.###.###&#34; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>C&rsquo;est pas toujours malin ni très folichon de réinventer le fil à couper la roue tiède, lors de la mise en service de scripts basiques et utilitaires&#8230;<br />
Cela dit, il est commode d&rsquo;avoir sous la main les briques principales, quelques grandes fonctions très récurrentes (manips de fichiers, etc) en <strong>vbs</strong><br />
<em>Grosso modo, le genre de manipulations qui font apprécier powershell&#8230;</em><br />
<span id="more-2"></span></p>
<h2>Envoi de mail</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">set msg = CreateObject(&quot;CDO.message&quot;) &nbsp;<br />
msg.Configuration.Fields.Item(&quot;http://schemas.microsoft.com/cdo/configuration/sendusing&quot;) = 2 &nbsp;<br />
msg.Configuration.Fields.Item(&quot;http://schemas.microsoft.com/cdo/configuration/smtpserver&quot;) = &quot;smtp.###.###&quot; &nbsp;'&lt;== <br />
msg.Configuration.Fields.Item(&quot;http://schemas.microsoft.com/cdo/configuration/smtpserverport&quot;) = 25 &nbsp;<br />
msg.Configuration.Fields.Update <br />
&nbsp;<br />
msg.From=&quot;expediteur@###.fr&quot; ' &lt;== <br />
msg.To=&quot;destinataire@###.fr&quot; &nbsp;'&lt;== <br />
msg.Subject=&quot;Sujet&quot; &nbsp;<br />
msg.TextBody=&quot;Corps du texte...&quot; 'la propriété &quot;addattachment&quot; peut etre utilisée plusieurs fois... &nbsp;<br />
msg.AddAttachment &quot;c:\xXXX.xls&quot; '&lt;== <br />
&nbsp;<br />
msg.MIMEFormatted=False &nbsp;<br />
msg.Send &nbsp;<br />
Wscript.echo &quot;Message Envoyé par &quot; &amp; msg.From &amp; &quot; à &quot; &amp; msg.to</div></div>
<h2>LECTURE d&rsquo;un fichier</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">'déclaration file system object &nbsp;<br />
Dim fso <br />
'instanciation &nbsp;<br />
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) <br />
'on instance le fichier texte &nbsp;<br />
Set Ftxt = FSO.OpenTextFile(&quot;chemin&quot;) <br />
'on parcourt chaque ligne du fichier texte &nbsp;<br />
Do While Not Ftxt.AtEndOfStream <br />
Variable = Ftxt.Readline <br />
'...&lt;== rajouter le code de traitement &nbsp;<br />
Loop <br />
Ftxt.Close</div></div>
<h2>ECRITURE dans un fichier</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">'déclaration file system object &nbsp;<br />
Dim fso <br />
'instanciation &nbsp;<br />
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) <br />
'on instance le fichier texte dans lequel on veut ecrire &nbsp;<br />
Set Ftxt = FSO.createTextFile(&quot;chemin&quot;,true) 'true=ecrase <br />
'On ecrit ce que l'on veut dans le fichier &nbsp;<br />
Ftxt.writeline (&quot;All the work and no play...&quot;) <br />
Ftxt.Close</div></div>
<h2>DEPLACER un fichier</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;'déclaration file system object &nbsp;<br />
Dim fso <br />
'instanciation &nbsp;<br />
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) <br />
'Déplacement du fichier &nbsp;<br />
Set Ftxt = fso.GetFile(&quot;cheminsource&quot;) &nbsp;<br />
Ftxt.move(&quot;monchemindestination&quot;) 'emplacement destination</div></div>
<h2>COPIER un fichier</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;'déclaration file system object &nbsp;<br />
Dim fso <br />
'instanciation &nbsp;<br />
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) <br />
'Copie du fichier &nbsp;<br />
Set Ftxt = fso.GetFile(&quot;cheminsource&quot;) &nbsp;<br />
'Fichier origine &nbsp;<br />
Ftxt.copy(&quot;chemindestination&quot;) 'emplacement destination</div></div>
<h2>SUPPRIMER un fichier</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">'déclaration file system object <br />
Dim fso <br />
'instanciation &nbsp;<br />
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) <br />
'Suppression du fichier &nbsp;<br />
Set Ftxt = fso.GetFile(&quot;cheminsource&quot;) &nbsp;<br />
'Fichier origine &nbsp;<br />
Ftxt.delete</div></div>
<h2>LISTER les fichiers d&rsquo;un dossier</h2>
<p><em>Méthode pas forcement la plus efficace, face à un &laquo;&nbsp;cmd /k dir *.bat&nbsp;&raquo;, mais ça dépend de l&rsquo;objectif&#8230;</em></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; Const ctePourLecture = 1 <br />
&nbsp; Const ctePourEcrire = 2 <br />
&nbsp; Const ctePourAjouter = 8 <br />
&nbsp;<br />
&nbsp; Dim objFSO, objDossier, objFichier, objResultat <br />
&nbsp; Dim Repertoire, NomFichierTxt <br />
&nbsp;<br />
&nbsp; On Error Resume Next <br />
&nbsp;<br />
&nbsp; Repertoire = &quot;\\XXXX\scripts&quot; <br />
&nbsp; NomFichierTxt = &quot;Resultat.txt&quot; <br />
&nbsp; Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) <br />
&nbsp; Set objDossier = objFSO.GetFolder(Repertoire) <br />
&nbsp; Set objResultat = objFSO.CreateTextFile((&quot;c:\&quot; &amp; NomFichierTxt),ctePourEcrire) <br />
&nbsp;<br />
&nbsp; If (objDossier.Files.Count &gt; 0) Then <br />
&nbsp; &nbsp; &nbsp;For Each objFichier In objDossier.Files <br />
&nbsp; &nbsp; &nbsp; &nbsp; If (InStr(1, objFichier.Name, &quot;.bat&quot;, 1) &gt; 0) Then <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; objResultat.WriteLine objFichier.Name <br />
&nbsp; &nbsp; &nbsp; &nbsp; End If <br />
&nbsp; &nbsp; &nbsp;Next <br />
&nbsp; &nbsp;End If <br />
&nbsp;<br />
&nbsp; objResultat.Close <br />
&nbsp; Set objResultat = Nothing <br />
&nbsp; Set objDossier = Nothing <br />
&nbsp; Set objFSO = Nothing</div></div>
<h2>CONCATENATION de fichiers d&rsquo;un dossier</h2>
<p>On error resume next<br />
  Dim fso,f,fd,txt,Dest<br />
  Const ForAppending=8, ForReading=1 </p>
<p>  critere = &laquo;&nbsp;BAT&nbsp;&raquo; &lsquo;à mettre en majuscules, pour éviter les erreurs<br />
  dossier_cible =&nbsp;&raquo;\\XXXXscripts&nbsp;&raquo;<br />
  fic_cible= &laquo;&nbsp;C:\resultats.txt&nbsp;&raquo;</p>
<p>  Set fso = CreateObject(&laquo;&nbsp;Scripting.FileSystemObject&nbsp;&raquo;)<br />
  set fd=fso.GetFolder(dossier_cible)<br />
  Set Dest=fso.OpenTextFile(fic_cible,ForAppending,true)</p>
<p>    for each f in fd.files<br />
   If Ucase(Mid(f.Name,len(f.name)-2,3))=critere Then </p>
<p>   Set fic=fso.OpenTextFile(fd &#038; &laquo;&nbsp;\&nbsp;&raquo; &#038; f.Name,ForReading)<br />
       txt=fic.ReadAll<br />
      fic.close<br />
       Dest.Write f.name &#038; txt &#038; vbcrlf &lsquo;afficher le nom du fichier &#038; son contenu<br />
      &lsquo; Dest.Write txt &lsquo;afficher seulement le contenu du fichier<br />
   End if<br />
  next<br />
  Dest.Close</p>
<h2>LECTURE d&rsquo;un fichier CSV</h2>
<p><em>Ne serait-ce que pour ne plus avoir besoin de bricoler ce genre de script, se mettre à powershell&#8230;</em><br />
Script trouvé quelque part, <strong>gloire à son auteur</strong> !</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) <br />
Set Ftxt = FSO.OpenTextFile(&quot;liste.csv&quot;) <br />
&nbsp;<br />
Do While Not Ftxt.AtEndOfStream &nbsp;<br />
MaVariable = Ftxt.Readline &nbsp;<br />
&nbsp;<br />
For Each strItem In CSVParse(mavariable) <br />
' &nbsp; &nbsp;wscript.Echo strItem ' affiche le contenu du fichier csv, champs apres champs ... <br />
'... inserer le code ici <br />
Next <br />
Loop <br />
Ftxt.Close <br />
&nbsp;<br />
Function CSVParse(ByVal strLine) <br />
&nbsp; &nbsp; Dim arrFields <br />
&nbsp; &nbsp; Dim blnIgnore <br />
&nbsp; &nbsp; Dim intFieldCount <br />
&nbsp; &nbsp; Dim intCursor <br />
&nbsp; &nbsp; Dim intStart <br />
&nbsp; &nbsp; Dim strChar <br />
&nbsp; &nbsp; Dim strValue <br />
&nbsp;<br />
&nbsp; &nbsp; Const QUOTE = &quot;&quot;&quot;&quot; <br />
&nbsp; &nbsp; Const QUOTE2 = &quot;&quot;&quot;&quot;&quot;&quot; <br />
&nbsp;<br />
&nbsp; &nbsp; If (Len(Trim(strLine)) = 0) then <br />
&nbsp; &nbsp; &nbsp; &nbsp; CSVParse = Array() <br />
&nbsp; &nbsp; &nbsp; &nbsp; Exit Function <br />
&nbsp; &nbsp; End If <br />
&nbsp; &nbsp; blnIgnore = False <br />
&nbsp; &nbsp; intFieldCount = 0 <br />
&nbsp; &nbsp; intStart = 1 <br />
&nbsp; &nbsp; arrFields = Array() <br />
&nbsp; &nbsp; strLine = strLine &amp; &quot;,&quot; <br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; For intCursor = 1 To Len(strLine) <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; strChar = Mid(strLine, intCursor, 1) <br />
&nbsp; &nbsp; &nbsp; &nbsp; Select Case strChar <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case QUOTE <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blnIgnore = Not blnIgnore <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case &quot;,&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If Not blnIgnore Then <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve arrFields(intFieldCount) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If (intCursor - intStart &gt; 0) Then <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strValue = Mid(strLine, intStart, _ <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intCursor - intStart) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If (Left(strValue, 1) = QUOTE) Then <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrFields(intFieldCount) = _ <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Replace(Mid(strValue, 2, _ <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Len(strValue) - 2), QUOTE2, QUOTE) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Else <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrFields(intFieldCount) = strValue <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Else <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrFields(intFieldCount) = Empty <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intFieldCount = intFieldCount + 1 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intStart = intCursor + 1 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If <br />
&nbsp; &nbsp; &nbsp; &nbsp; End Select <br />
&nbsp; &nbsp; Next <br />
&nbsp; &nbsp; &nbsp; CSVParse = arrFields <br />
End Function</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Ping des controleurs de domaine en powershell</title>
		<link>https://blog.developpez.com/sysadmin/p10062/powershell/ping_des_controleurs_de_domaine_en_power</link>
		<comments>https://blog.developpez.com/sysadmin/p10062/powershell/ping_des_controleurs_de_domaine_en_power#comments</comments>
		<pubDate>Thu, 16 Jun 2011 18:03:20 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[Active-Directory]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La supervision des contrôleurs de domaine est facilitée par des outils tels que le vénérable sonar ou son descendant ultrasound (google -> microsoft &#8230;) . On peut aussi être intéressé par une information quasi instantanée de premier niveau, à savoir, repondent-ils au ping&#8230; Dans cet esprit, j&#8217;ai ce vieux bout de code, interrogeant le domaine, montant la liste des DC et affichant en vert quand c&#8217;est bon, rouge quand ça répond pas. Le gros du [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La supervision des contrôleurs de domaine est facilitée par des outils tels que le vénérable <em>sonar</em> ou son descendant <em>ultrasound</em> (google -> microsoft &#8230;) .<br />
On peut aussi être intéressé par une information quasi instantanée de premier niveau, à savoir, repondent-ils au ping&#8230;<span id="more-4"></span></p>
<p>Dans cet esprit, j&rsquo;ai ce vieux bout de code, interrogeant le domaine, montant la liste des DC et affichant en vert quand c&rsquo;est bon, rouge quand ça répond pas. </p>
<p>Le gros du code tourne autour d&rsquo;une récupération d&rsquo;info WMI, comme souvent..</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ping = new-object System.Net.Networkinformation.Ping <br />
$objDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() &nbsp;<br />
$dc=$objDomain.FindAllDomainControllers() | Select-Object Name,IpAddress |sort name <br />
for ($i=0; $i -le $dc.count-1 ;$i++) { <br />
&nbsp; &nbsp;Write-Host -ForegroundColor &quot;white&quot; $dc[$i].name -NoNewLine &quot; - IP-&gt; &quot; &nbsp; &nbsp;<br />
&nbsp; &nbsp;if ($ping.send($dc[$i].name).status -eq &quot;success&quot; ) &nbsp;<br />
&nbsp; &nbsp;{ Write-Host -ForegroundColor &quot;green&quot; -NoNewLine $dc[$i].ipaddress} &nbsp;<br />
&nbsp; &nbsp;else &nbsp;<br />
&nbsp; &nbsp;{ Write-Host -ForegroundColor &quot;red&quot; -NoNewLine $dc[$i].ipaddress} &nbsp;<br />
&nbsp; &nbsp;Write-Host -ForegroundColor &quot;white&quot; -NoNewLine &quot; - R-&gt; &quot; <br />
&nbsp; &nbsp;if ($dc[$i].name.substring(0,2) -eq &quot;cm&quot;) <br />
&nbsp; &nbsp;{$ip=$dc[$i].Ipaddress.substring(0,$dc[$i].Ipaddress.length -3) + &quot;XXX&quot;; &nbsp; &nbsp;#&lt;- à modifier pour votre pattern à vous <br />
&nbsp; &nbsp; &nbsp; if ($ping.send($ip).status -eq &quot;success&quot; ) &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ Write-Host -ForegroundColor &quot;green&quot; $ip} &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ Write-Host -ForegroundColor &quot;red&quot; $ip} <br />
&nbsp; &nbsp;} <br />
&nbsp; &nbsp;else <br />
&nbsp; &nbsp;{ <br />
&nbsp; &nbsp;$Config = Get-Wmiobject win32_NetworkAdapterConfiguration -comp $dc[$i].name <br />
&nbsp; &nbsp;for ($j=0; $j -le $config.count -1;$j++) { <br />
&nbsp; &nbsp; &nbsp; if ($config[$j].IPAddress -ne $null ){ &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ($ping.send($config[$j].DefaultIPGateway).status -eq &quot;success&quot; ) &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ Write-Host -ForegroundColor &quot;green&quot; $config[$j].DefaultIPGateway} &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ Write-Host -ForegroundColor &quot;red&quot; $config[$j].DefaultIPGateway} <br />
&nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp;} <br />
} <br />
}</div></div>
<p>Il sera possible de profiter de la boucle principale pour rajouter des tests variés, tels que la présence ou non de services tournant sur les serveurs (DFS, antivirus, spooler)&#8230; j&rsquo;y reviendrai&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DHCP et IP en powershell</title>
		<link>https://blog.developpez.com/sysadmin/p10063/powershell/dhcp_et_ip_en_powershell</link>
		<comments>https://blog.developpez.com/sysadmin/p10063/powershell/dhcp_et_ip_en_powershell#comments</comments>
		<pubDate>Sat, 18 Jun 2011 17:37:43 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[N&#8217;ayant pas vu (ou pas cherché bien fort) le sympathique wrapper DHCP du ScriptGuy, voici quelques scripts maison et/ou scriplets pour jouer avec des pings, manager des étendues DHCP, ou plus généralement les serveurs DHCP et l&#8217;indispensable netsh&#8230; Ping $ping = new-object System.Net.Networkinformation.Ping $ping.send(&#34;[nom du serveur]&#34;) Remarque : il est possible d&#8217;obtenir uniquement le résultat en exécutant : $ping.send(&#171;&#160;[nm du serveur]&#160;&#187;).status Ping d&#8217;une plage d&#8217;adresses IP $ping = new-object system.net.networkinformation.ping ; 10..20 &#124; foreach { [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>N&rsquo;ayant pas vu (ou pas cherché bien fort) le sympathique <a href="http://blogs.technet.com/b/heyscriptingguy/archive/2011/02/14/use-the-powershell-dhcp-module-to-simplify-dhcp-management.aspx">wrapper DHCP du ScriptGuy</a>, voici quelques scripts maison et/ou scriplets pour jouer avec des pings, manager des étendues DHCP, ou plus généralement les serveurs DHCP et l&rsquo;indispensable <em>netsh</em>&#8230;<span id="more-5"></span></p>
<h3>Ping</h3>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ping = new-object System.Net.Networkinformation.Ping <br />
$ping.send(&quot;[nom du serveur]&quot;)</div></div>
<p>Remarque : il est possible d&rsquo;obtenir uniquement le résultat en exécutant : <em>$ping.send(&laquo;&nbsp;[nm du serveur]&nbsp;&raquo;).status</em></p>
<h3>Ping d&rsquo;une plage d&rsquo;adresses IP</h3>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ping = new-object system.net.networkinformation.ping ; 10..20 | foreach { $ip = &quot;XXX.XXX.$_.XXX&quot; ; $ping.send($ip) } |select Address, Status</div></div>
<h3>Nslookup d&rsquo;une plage IP</h3>
<p>Le <em>nmap</em> du pauvre, les vérifications de ports ouverts en moins &#8230;</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;1..255 | % { [System.Net.Dns]::GetHostByAddress(&quot;XXX.XXX.XXX.$_&quot;) } 2&gt; Out-Null | ft</div></div>
<p><img src="http://www.virtua-peanuts.net/depot/private/blog-dje/icons/lightbulb.png"/> Bien veiller à remplacer les <em>XXX</em> &#8230;</p>
<h3>Rajout d&rsquo;une plage d&rsquo;exclusion DHCP pour chaque scope DHCP </h3>
<p>Approche itérative, dans lequel le second octet est issu d&rsquo;un tableau&#8230; Le reste du script ne fait que préparer des lignes de commandes à rediriger vers un fichier <em>.bat</em> .<br />
Il serait aussi possible d&rsquo;exécuter chaque commande directement dans la boucle <em>foreach</em> avec <em>invoke-expression</em> (pas testé ici car powershell n&rsquo;est pas installé sur le serveur dhcp, &#8230;)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$scopes=@(101,103,104,111,112,113,114,121,122,123,124,131,132,133,134,141,142,143,144,151,152,153,154) <br />
foreach ($scope in $scopes){1..2 | % {&quot;netsh dhcp server \\[ServeurDHCP]$_ scope XXX.$scope.0.0 add excluderange XXX.$scope.2.0 XXX.$scope.2.0&quot;}}</div></div>
<p>Remarque : script adapté pour 2 serveurs dhcp d&rsquo;où le premier <em>foreach</em>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mini challenge bash/awk vs powershell</title>
		<link>https://blog.developpez.com/sysadmin/p10064/powershell/mini_challenge_bash_awk_vs_powershell</link>
		<comments>https://blog.developpez.com/sysadmin/p10064/powershell/mini_challenge_bash_awk_vs_powershell#comments</comments>
		<pubDate>Sun, 19 Jun 2011 10:22:35 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mis au défi de faire mieux en powershell qu&#8217;en bash (et une louche d&#8217;awk) par un collègue, j&#8217;ai pondu le mini script suivant : Défi : Soit un fichier texte contenant des noms de serveurs, on le nommera &#171;&#160;serveurs.txt&#160;&#187; Le plus simplement et efficacement possible, coder un script qui exécutera un script annexe autant de fois que de lignes dans le fichier &#171;&#160;serveurs.txt&#160;&#187; Évidement, présenté comme cela, ça ne présente que peu d’intérêt, cela dit, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Mis au défi de faire mieux en powershell qu&rsquo;en bash (et une louche d&rsquo;awk) par un collègue, j&rsquo;ai pondu le mini script suivant :</p>
<h3>Défi : </h3>
<p>Soit un fichier texte contenant des noms de serveurs, on le nommera &laquo;&nbsp;serveurs.txt&nbsp;&raquo;<br />
Le plus simplement et efficacement possible, coder un script qui exécutera un script annexe autant de fois que de lignes dans le fichier &laquo;&nbsp;serveurs.txt&nbsp;&raquo;</p>
<p><em>Évidement, présenté comme cela, ça ne présente que peu d’intérêt, cela dit, cette méthode nous est utile pour ne pas multiplier les taches cron&#8230;</em><br />
<span id="more-7"></span></p>
<h3>bash &amp; awk</h3>
<p><strong>mon_script.sh :</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">echo $0</div></div>
<p><strong>One-liner qui va bien :</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{print (&quot;sh mon_script.sh &quot; $0)}' serveurs.txt | sh</div></div>
<h3>powershell</h3>
<p><strong>mon_script.ps1 :</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">write-host $arg[0]</div></div>
<p><strong>One-liner qui va bien :</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;Get-Content -path serveurs.txt |%{invoke-expression &quot;./mon_script.ps1 $_&quot;}</div></div>
<h3>Vainqueur</h3>
<p>Pour moi c&rsquo;est <strong>match nul</strong>, à moins de commencer mesquinement à compter le nombre de caractères&#8230;<br />
Plus sérieusement, les 2 approches me semblent partager la même logique. Je doute de ne jamais pouvoir faire une comparaison de performance &laquo;&nbsp;brute&nbsp;&raquo; de traitement de chaines de caractères compte tenu des <em>OS</em> et serveurs physiques trop différents&#8230;<br />
<br />
Un avis éclairé sur la question sera toujours bienvenu !!</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Réplication DFS corrompue par FRS&#8230;</title>
		<link>https://blog.developpez.com/sysadmin/p10053/active-directory/replication_dfs_corrompue_par_frs</link>
		<comments>https://blog.developpez.com/sysadmin/p10053/active-directory/replication_dfs_corrompue_par_frs#comments</comments>
		<pubDate>Tue, 14 Jun 2011 20:40:31 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[Active-Directory]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il est relativement facile de corrompre toute son architecture DFS, dans un environnement AD2003 (R2 ). Voici quelques clés pour réduire le risque, et comment nettoyer les décombres après la catastrophe&#8230; Microsoft est plein d&#8217;humour, ou &#171;&#160;inattention interdite&#160;&#187; Offrir la possibilité de faire cohabiter 2 mécanismes de réplication différents passe encore, mais les nommer de manière quasi identique est un coup bas : Il ne faut surtout pas confondre la console mmc de la réplication [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Il est relativement facile de corrompre toute son architecture DFS, dans un environnement AD2003 (R2 ).<br />
Voici quelques clés pour réduire le risque, et comment nettoyer les décombres <em>après</em> la <em>catastrophe</em>&#8230;<span id="more-8"></span></p>
<h2>Microsoft est plein d&rsquo;humour, ou &laquo;&nbsp;inattention interdite&nbsp;&raquo;</h2>
<ul>
<li>Offrir la possibilité de faire cohabiter 2 mécanismes de réplication différents passe encore, mais les nommer de manière quasi identique est un coup bas :<br />
Il ne faut surtout pas confondre la console mmc de la réplication DFS (introduite en AD 2003 R2),nommée &laquo;&nbsp;<strong>Gestion du système de fichiers distribués DFS</strong>&nbsp;&raquo; avec<br />
la console mmc de réplication FRS, nommée &laquo;&nbsp;<strong>Système de fichiers distribués (DFS)</strong>&laquo;&nbsp;<br />
<img src="http://blog.developpez.com/media/rdesktop_-_vmp-hd-dfs02_052.png" width="473" height="473" alt="DFS!=FRS" /> </li>
<li>Non content de cohabiter, on peut <em>éditer</em> sans message d&rsquo;avertissement une réplication <strong>DFS</strong> via la console <strong>FRS</strong>. <br />
<strong>Et là, c&rsquo;est cuit.</strong>
</li>
</ul>
<h2>Bricoles à noter</h2>
<ul>
<li>La réplication FSR crée un dossier <em>FRS-Staging</em> sur c:\, pour y stocker temporairement les fichiers en cours de réplication.<br />Ce dossier peut grossir jusqu&rsquo;à occuper tout l&rsquo;espace&#8230;</li>
<li>La réplication DFS crée un dossier Private-DFS à l&rsquo;emplacement du dossier répliqué.<br />Ce dossier est censé rester dans la limite fixée par la valeur paramétrée via la console DFS concernant ce membre de réplication( 4go par défaut, prévoir de l&rsquo;augmenter quasiment à coup sûr). Cette limite peut être dépassée en cas de corruption massive&#8230;</li>
<li> DFS 2008 R2 n&rsquo;est pas visible en 2003 R2 : <br />
La mmc DFS 2008 R2 affichera sans problème les groupes de réplication créés avec 2003 R2, mais l&rsquo;inverse n&rsquo;est pas vrai. Attention aux effets de bords</li>
<li> DFS 2008 R2 : v6.0 / DFS 2003 R2 : v5.2 &#8230;</li>
</ul>
<h2>comment nettoyer une réplication corrompue</h2>
<p>Sur chaque serveur membre de réplication :</p>
<ul>
<li>Stopper les services ntfrs et DFS s&rsquo;ils sont lancés</li>
<li>Lancer Regedit</li>
<li>HKLM / currentcontrolset / services / Ntfrs</li>
<li>Supprimer les entrées surnuméraires dans /ReplicaSet et /CumulativeReplicaSet <br />
Attention, dans le cas d&rsquo;un hebergement sur controleur de domaine, cette clé de registre accueille aussi les paramètres de <strong>sysvol</strong> (sous entendu, pas touche, <em>verboten</em>)</li>
<li>Supprimer les dossiers FRS-staging sur c:\ , le dossier de réplication DFS (ou ce qu&rsquo;il en reste) ainsi que le partage réseau </li>
<li>Démarrer les services ntfrs et DFS</li>
</ul>
<p>Et l&rsquo;on prendra soin de souffler un grand coup avant de recréer sa topologie de réplication&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VBS / WMI / Recherche de PC connectés à une file d&#8217;impression particulière</title>
		<link>https://blog.developpez.com/sysadmin/p10044/vbs/vbs_wmi_recherche_de_pc_connectes_a_une</link>
		<comments>https://blog.developpez.com/sysadmin/p10044/vbs/vbs_wmi_recherche_de_pc_connectes_a_une#comments</comments>
		<pubDate>Fri, 10 Jun 2011 17:02:00 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[Active-Directory]]></category>
		<category><![CDATA[vbs]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Cas de figure simple mais fréquent, une enquête de routine au sujet d&#8217;impressions fantômes&#8230; Ces impressions fantômes sont probablement le fait d&#8217;un pc mal configuré, plus que de la malveillance&#8230; Face à cela, à moins de disposer AVANT d&#8217;un écosystème de log, il faut prendre le problème à l&#8217;envers, et se demander qui est en mesure d&#8217;envoyer des jobs sur l&#8217;imprimante qui sort des documents que personne n&#8217;imprime &#8230; En pré requis, Configurer un partage [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Cas de figure simple mais fréquent, une enquête de routine au sujet <em>d&rsquo;impressions fantômes</em>&#8230;</p>
<p>Ces impressions fantômes sont probablement le fait d&rsquo;un pc mal configuré, plus que de la malveillance&#8230; </p>
<p>Face à cela, à moins de disposer <em>AVANT</em> d&rsquo;un écosystème de log, il faut prendre le problème à l&rsquo;envers, et se demander <em>qui</em> est en mesure d&rsquo;envoyer des jobs sur l&rsquo;imprimante qui sort des documents que <em>personne</em> n&rsquo;imprime &#8230;</p>
<p><span id="more-1"></span></p>
<p>En pré requis,  </p>
<ul>
<li>Configurer un partage réseau avec ACL large (tout le monde en écriture)</li>
<li>Rajouter l&rsquo;exécution de ce bout de script dans le <em>logon script</em> des utilisateurs</li>
</ul>
<p>Ensuite, tout le script repose sur une requête <em>WMI</em> extrêmement basique, et sur l&rsquo;écriture d&rsquo;un fichier.<br />
B-a-s-i-q-u-e, mais éprouvé !</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">'Scan port IP pour recherche d'une cible et écriture des positifs dans un partage réseau '--------------------------------------------------------------------------------------- <br />
&nbsp;<br />
Set WshNetwork = WScript.CreateObject(&quot;WScript.Network&quot;) &nbsp;<br />
NomMachine = WshNetwork.ComputerName &nbsp;<br />
NomUtilisateur = WshNetwork.UserName <br />
&nbsp;<br />
'Wscript.Echo &quot;&lt;debut&gt; &quot; <br />
&nbsp;<br />
ipcible=&quot;XXX.XXX.XXX.XXX&quot; ' &lt;- inserer votre ip cible ici <br />
partage=&quot;\\[votre serveur]\test_scan_port_ip\&quot; &nbsp;'&lt;-inserer votre partage réseau ici <br />
strComputer = Nommachine <br />
&nbsp;<br />
Set objWMIService = GetObject(&quot;winmgmts:&quot; _ &amp; &quot;{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;) <br />
&nbsp;<br />
Set colPorts = objWMIService.ExecQuery _ (&quot;Select * from Win32_TCPIPPrinterPort&quot;) <br />
&nbsp;<br />
For Each objPort in colPorts &nbsp;<br />
'Wscript.Echo &quot;Description: &quot; &amp; objPort.Description &nbsp;<br />
'Wscript.Echo &quot;Host Address: &quot; &amp; objPort.HostAddress &nbsp;<br />
'Wscript.Echo &quot;Name: &quot; &amp; objPort.Name &nbsp;<br />
'Wscript.Echo &quot;Port Number: &quot; &amp; objPort.PortNumber &nbsp;<br />
'Wscript.Echo &quot;Protocol: &quot; &amp; objPort.Protocol &nbsp;<br />
'Wscript.Echo &quot;SNMP Community: &quot; &amp; objPort.SNMPCommunity &nbsp;<br />
'Wscript.Echo &quot;SNMP Dev Index: &quot; &amp; objPort.SnMPDevIndex &nbsp;<br />
'Wscript.Echo &quot;SNMP Enabled: &quot; &amp; objPort.SNMPEnabled &nbsp;<br />
'wscript.echo &quot;-------------------------------------&quot; &nbsp;<br />
if objPort.HostAddress=ipcible then &nbsp;<br />
'wscript.echo &quot;BINGO NOUS AVONS UN GAGNANT : &quot; &amp; NomMachine &amp; &quot;\&quot; &amp; NomUtilisateur &nbsp;<br />
'&lt;&lt;&lt;&lt;&lt;&lt;&lt; ECRITURE dans un fichier &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &nbsp;<br />
'déclaration file system object &nbsp;<br />
Dim fso &nbsp;<br />
'instanciation &nbsp;<br />
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) &nbsp;<br />
'on instance le fichier texte dans lequel on veut ecrire &nbsp;<br />
Set Ftxt = FSO.createTextFile(partage &amp; NomMachine &amp; &quot;_&quot; &amp; NomUtilisateur &amp; &quot;.txt&quot; ,true) &nbsp;<br />
'true=ecrase 'On ecrit ce que l'on veut dans le fichier &nbsp;<br />
Ftxt.writeline (&quot;Description: &quot; &amp; objPort.Description) &nbsp;<br />
Ftxt.writeline (&quot;Host Address: &quot; &amp; objPort.HostAddress) &nbsp;<br />
Ftxt.writeline (&quot;Name: &quot; &amp; objPort.Name) &nbsp;<br />
Ftxt.writeline (&quot;Port Number: &quot; &amp; objPort.PortNumber) &nbsp;<br />
Ftxt.writeline (&quot;Protocol: &quot; &amp; objPort.Protocol) &nbsp;<br />
Ftxt.writeline (&quot;SNMP Community: &quot; &amp; objPort.SNMPCommunity) &nbsp;<br />
Ftxt.writeline (&quot;SNMP Dev Index: &quot; &amp; objPort.SnMPDevIndex) &nbsp;<br />
Ftxt.writeline (&quot;SNMP Enabled: &quot; &amp; objPort.SNMPEnabled) &nbsp;<br />
Ftxt.Close end if &nbsp;<br />
Next &nbsp;<br />
'Wscript.Echo &quot;&lt;fin&gt;&quot;</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wlw Erreur 806</title>
		<link>https://blog.developpez.com/sysadmin/p10039/viedublog/wlw_erreur_806</link>
		<comments>https://blog.developpez.com/sysadmin/p10039/viedublog/wlw_erreur_806#comments</comments>
		<pubDate>Wed, 08 Jun 2011 09:34:23 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[VieDuBlog]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ahum, Windows Live Writer, au moment de publier un article, m&#8217;envoie une erreur 806 &#8230; ça semble venir de l&#8217;html inclus dans le texte.. Une astuce quelqu&#8217;un ?]]></description>
				<content:encoded><![CDATA[<p>Ahum,<br />
Windows Live Writer, au moment de publier un article, m&rsquo;envoie une <em>erreur 806</em> &#8230;<br />
ça semble venir de l&rsquo;html inclus dans le texte..</p>
<p>Une astuce quelqu&rsquo;un ?</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lister les ordinateurs d&#8217;un domaine AD en powershell</title>
		<link>https://blog.developpez.com/sysadmin/p10038/powershell/lister_les_ordinateurs_d_un_domaine_ad_e</link>
		<comments>https://blog.developpez.com/sysadmin/p10038/powershell/lister_les_ordinateurs_d_un_domaine_ad_e#comments</comments>
		<pubDate>Tue, 07 Jun 2011 17:21:14 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[Active-Directory]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Petit script très basique, pour jouer avec une requête AD très simple &#8230; $filtre = &#34;(objectCategory=Computer)&#34; $domaine = New-Object System.DirectoryServices.DirectoryEntry $chercheur = New-Object System.DirectoryServices.DirectorySearcher $chercheur.SearchRoot = $domaine $chercheur.PageSize = 1000 $chercheur.Filter = $filtre # Ajout de la propriété que l'on recherche... $prop = &#34;name&#34; foreach ($i in $prop){$chercheur.PropertiesToLoad.Add($i)} $colResults = $chercheur.FindAll() foreach ($objResult in $colResults) { $objItem = $objResult.Properties # Sortie vers l'écran write-host $objItem.name } L&#8217;intérêt de ce mini script réside dans la simplicité [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Petit script très basique, pour jouer avec une requête AD très simple &#8230;</p>
<div style="border: 1px solid black;background-color:lightgray;">
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$filtre = &quot;(objectCategory=Computer)&quot;<br />
$domaine = New-Object System.DirectoryServices.DirectoryEntry<br />
$chercheur = New-Object System.DirectoryServices.DirectorySearcher<br />
$chercheur.SearchRoot = $domaine<br />
$chercheur.PageSize = 1000<br />
$chercheur.Filter = $filtre<br />
<br />
# Ajout de la propriété que l'on recherche...<br />
$prop = &quot;name&quot;<br />
foreach ($i in $prop){$chercheur.PropertiesToLoad.Add($i)}<br />
<br />
$colResults = $chercheur.FindAll()<br />
<br />
foreach ($objResult in $colResults) {<br />
$objItem = $objResult.Properties <br />
# Sortie vers l'écran<br />
write-host $objItem.name<br />
}</div></div>
</div>
<p>L&rsquo;intérêt de ce mini script réside dans la simplicité de requêtage, <em>$filtre = &laquo;&nbsp;(objectCategory=Computer)&nbsp;&raquo;</em>, qui, associé à la connexion simplifiée à l&rsquo;AD (remember vbs&#8230;) de powershell, donne accès très rapidement aux infos des objets AD.</p>
<p>On pourrait afficher bien plus d&rsquo;informations en considérant <em>$prop</em> comme une collection de texte, et y rajouter d&rsquo;autres noms de propriétés.</p>
<p>Je renvoie vers <em>adsiedit</em> pour la litanie des propriétés des objets AD&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>C&#8217;est parti !</title>
		<link>https://blog.developpez.com/sysadmin/p10035/viedublog/c_est_parti_1</link>
		<comments>https://blog.developpez.com/sysadmin/p10035/viedublog/c_est_parti_1#comments</comments>
		<pubDate>Mon, 06 Jun 2011 17:34:31 +0000</pubDate>
		<dc:creator><![CDATA[sensei.dje]]></dc:creator>
				<category><![CDATA[VieDuBlog]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[10 print &#34;Premier post, bienvenue à tous&#34; Ici l&#8217;on causera Active-Directory, petits scripts qui sauvent la vie, administration système comme sport de combat quotidien &#8230; Un Cluster d&#8217;impression qui part en vrille, 600 files en rades ? Un gros conflit de réplication DFS / FRS sur 50 serveurs ? Les ACL du partage réseau USERS qui sautent, 2 To à remettre d&#8217;aplomb ? Ah, dira-t&#8217;on jamais assez la vie trépidante des administrateurs ? J&#8217;y passe [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">10 print &quot;Premier post, bienvenue à tous&quot;</div></div>
<p>Ici l&rsquo;on causera Active-Directory, petits scripts qui sauvent la vie, administration système comme sport de combat quotidien &#8230; </p>
<ul>
<li>Un Cluster d&rsquo;impression qui part en vrille, 600 files en rades ?</li>
<li>Un gros conflit de réplication DFS / FRS sur 50 serveurs ?</li>
<li>Les ACL du partage réseau USERS qui sautent, 2 To à remettre d&rsquo;aplomb ?</li>
</ul>
<p>Ah, dira-t&rsquo;on jamais assez la vie trépidante des administrateurs ?</p>
<p>J&rsquo;y passe mes journées, ça sera donc un plaisir d&rsquo;en parler la nuit.</p>
<p>Chaque commentaire est bienvenu, en bien, en mal, en don paypal (rêvons un peu).</p>
<p>Je n&rsquo;apprécie rien plus que &laquo;&nbsp;mouarf je peux faire mieux en 1 ligne d&rsquo;awk et 12 grep&nbsp;&raquo; et le faire &#8230; et que ça marche ^^</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
