bernhard frank’s blog
[bi:frængk] - freimütiges über webhosting auf windows
disclaimerThese postings are provided "AS IS" with no warranties, and confer no rights. Use of included code samples are subject to the terms specified at Microsoft - Terms of Use
The tool Orca.exe is a database editor of windows installer files (*.msi). You can create and edit .msi files and merge modules:
The tool is helpful if you need some more insight into *.msi files – however orca.exe is a bit tricky to find – Here is my way:
Once installed – when you right click a *.msi file you get the context menu Edit with Orca
Kurz und knackig:
Windows Authentication + Host Name = http 401 error
if (host name != computername && server != Domain Member)
Lösung: Host Name in Registry Eintragen -> MS KB Article 896861 - Detais s.u.
Scenario:
Webserver IIS7.x – keine Domäne – Server ist Bestandteil einer Workgroup.
Website -> Authentication -> Windows Authentication enabled
Authorization Rule „allow all“ entfernt und Allow Eintrag für Specific user „Administrator“ gemacht. (Alternativ: Website -> Authentication -> Anonymous Authentication deaktivieren)
Problem:
Beim Browsen auf die Seite bekomme ich ein Passwort Prompt (ok.) Nach Eingabe von Benutzername und Passwort werde ich noch 2mal aufgefordert Username und Passwort (böse) einzugeben – letztendlich schlägt der Zugriff fehl und das obwohl der user (in meinem Fall administrator) 100%ig Zugriff haben sollte.
HTTP Error 401.1 – Unauthorized
You do not have permission to view this directory or page using the credentials that you supplied. Detailed Error Information
Module WindowsAuthenticationModule
Notification AuthenticateRequest
Handler PageHandlerFactory-Integrated
Error Code 0xc000006d
Logon Method Not yet determined
Logon User Not yet determined
Eventlog zeigt Audit Failure bei Logon mit Status 0xc000006d:
An account failed to log on.
Subject:
Security ID: NULL SID
Account Name: -
Account Domain: -
Logon ID: 0x0
Logon Type: 3
Account For Which Logon Failed:
Account Name: administrator
Account Domain: TEST-UXANGUNQ4J
Failure Information:
Failure Reason: An Error occured during Logon.
Status: 0xc000006d
Sub Status: 0x0
Process Information:
Caller Process ID: 0x0
Caller Process Name: -
Network Information:
Workstation Name: TEST-UXANGUNQ4J
Source Network Address: 127.0.0.1
Source Port: 58948
Detailed Authentication Information:
Logon Process:
Authentication Package: NTLM
Transited Services: -
Package Name (NTLM only): -
Key Length: 0
Ursachenforschung:
Meine Website im IIS hat einen „Host Name“ in den „Bindings“ eingetragen – werf ich den raus und browse auf die Website mit dem Netbios Namen funktioniert es wie gewünscht.
MS KB Article 896861: “…a… security feature … prevent reflection attacks on your computer. … authentication fails if … the custom host header … does not match the local computer name.
Lösung:
In obigen zitierten KB Artikel: “You receive error 401.1 when you browse a Web site that uses Integrated Authentication and is hosted on IIS 5.1 or a later version”
Bei “Method2:” -> Starten mit ”2. Click Start, click Run, type regedit, and then click OK.”
Nur die Einträge für BackConnectionHostNames machen:
Iisreset.exe ausführen und danach funktioniert der Zugriff.
I ran inot the error when saving the release details of my project hosted at codeplex.
I hit the save button and got the error:"There were errors saving the item." or "Invalid date value"
workaround: change your browser's language preferences to en-US only:
refresh codeplex site and save using the US date format.
Szenario:
Fujitsu Siemens Celsius H240 mit „Marvell Yukon 88E8055 PCI-E Gigabit Ethernet Controller“
Windows Server 2008 R2 Standard (64Bit)
Vor Hyper-V Installation – Netzwerk OK (100MBit) – Remote Desktop auf die Maschine kein Problem.
Nach Hyper-V Installation -> traffic via Virtual Network Adapter -> Remote Desktop auf die Maschine kaum verwendbar + sonstiges Netzwerk langsam.
Abhilfe:
TCP offloading abschalten:
"Large Send Offload Version 2 (IPv4)" on the virtual switch -> disabled
"Large Send Offload (IPv4)" physical adapter -> disabled
Dank Very slow network performance with Intel NIC when TCP Large Send Offload is enabled !
DoBlogPing ist für Blogger die Ping Server über neue Einträge auf den eigenen Blog unterrichten wollen - wichtig auch damit Posts schneller bei Suchmaschinen gefunden werden. DoBlogPing setzt einen XML-RPC Aufruf zur Methode weblogUpdates.ping ab. Der Aufruf ist ein einfacher HTTP Post mit XML an die RPC URL des Ping Servers.
Die meisten Blog-Web-Applikationen verfügen über einen eigenen BlogPing Mechanismus und erledigen den BlogPing automatisch für den Blogger. Warum habe ich trotzdem diese APP geschrieben?
Ich wollte:
DoBlogPing ist Open Source und liegt auf http://doblogping.codeplex.com.
Wie finde ich heraus ob ich Charts mit Logparser darstellen kann?
logparser -h -o:chart
Chartunterstützung fehlt:
Error creating output format "chart": This output format requires a licensed Microsoft Office Chart Web Component to be installed on the local machine
Um das Problem zu beheben muss man noch die Office Web Components 11 installieren – anschließend sollte man noch auf das Microsoft Office 2003 Web Components Service Pack 1 updaten.
Chartunterstützung installiert:
Output format: CHART (Chart Output Format)
Writes output to a chart image file
INTO syntax:
<filename>
Chart output image filename
Parameters:
-chartType <chart type> : Chart type; one of: Line,
LineMarkers, LineStacked,
LineStackedMarkers, LineStacked100,
LineStacked100Markers, Line3D,
LineOverlapped3D, LineStacked3D,
LineStacked1003D, SmoothLine,
SmoothLineMarkers, SmoothLineStacked
, SmoothLineStackedMarkers,
SmoothLineStacked100, SmoothLineStac
ked100Markers, BarClustered,
BarStacked, BarStacked100, Bar3D,
BarClustered3D, BarStacked3D,
BarStacked1003D, ColumnClustered,
ColumnStacked, ColumnStacked100,
Column3D, ColumnClustered3D,
.
Log Parser ist ein vielseitiges Werkzeug mit dem Abfragen auf Text-basierte Daten wie Log-Dateien, XML-Dateien und CSV-Dateien, sowie andere Windows Informationsquellen (Event-Log, der Registry, das Dateisystem und Active Directory) möglich sind.
Die Abfragen werden in einer SQL-Ähnlichen Syntax durchgeführt:
logparser -i:csv "select PLZ,Ort from http://blogs.technet.com/bernhard_frank/attachment/3306657.ashx where Ort like 'Regensbu%'
PLZ Ort
----- ----------
93049 Regensburg
Statistics:
-----------
Elements processed: 4
Elements output: 1
Execution time: 0.65 seconds
(in obiger Logparser Beispiel Abfrage wird die Postleitzahl von Orten mit den Anfangsbuchstaben "Regensbu" in einer auf einem Webserver geparkten CSV Datei durchgeführt)
Logparser ist kostenlos und kann vom Microsoft Download Center heruntergeladen werden. Das Werkzeug ist schnell auch im Umgang mit großen Dateien – schließlich verwenden auch die Web-Operations Kollegen dieses Tool zum Auswerten ihrer Serverlogs. Die Ausgabe kann als Text oder Grafik, durch eine Schablone geparst oder in eine Datenbank erfolgen:
Die Anwendungsbeispiele sind vielfältig und die Kreativität des Anwenders ist gefragt:
Beispiel: Berechnung der Summe der Spritkosten/Monat aus der vom Online-Konto heruntergeladenen Umsatz – CSV Datei (Anm.: zuvor etwaige ',' zu '. ' und '; ' zu ',' im CSV umwandeln).
logparser "select Quantize(To_Date(To_Timestamp(Valutadatum,'dd.MM.yy')),2592000) as [Month],Mul(Sum(To_REAL(Betrag)),-1) as [Sum] into c:\temp\benzinkosten.jpg from c:\downloads\kontoumsatz.csv where [Begünstigter/Zahlungspflichtiger] like '%Tank%' or [Begünstigter/Zahlungspflichtiger] like '%Station%' group by [Month] order by [Month]" -o:chart -charttype:ColumnClustered -view:on -charttitle:"Spritkosten(€)/Monat" -oTsFormat:"MMM yyyy" -values:on
Das deale Tool große (CSV-) Dateien (Excel) nach einen oder mehreren Werten zu suchen zu kombinieren und diese zu auszugeben bzw. zu exportieren.
Klar, dass Logparser auch bei der Logdatei-Analyse eines Webservers sehr zu empfehlen ist, um z.B: an Informationen wie „Was ist das verwendete Betriebssystem“, Anzahl der Besucher, Stoßzeiten, Datendurchsatz, Meist gesehene Seiten und http-Fehler zu kommen.
Vorraussetzungen:
Logparser: Download bei www.microsoft.com/downloads -> Suche nach „logparser“
Für Grafik-Ausgabe: noch die Office Web Components 11 + Microsoft Office 2003 Web Components Service Pack 1 installieren (ebenfalls kostenlos bei www.microsoft.com/downloads )
Weitere Infos unter www.logparser.com oder hier auf dem Blog
Um unter Windows 7 (oder Vista) einen Prozess mit Administrator Privilegien zu starten reicht ein Rechter Mausklick und ein anschließendes „Run as administrator“:
Um das Ganze von der Powershell aus zu machen genügt:
start-process -Verb "runas" notepad
Anschließend nur noch das etwaige UAC Prompt quittieren.
Welches Betriebssystem nutzt der Webseiten Besucher?
Die Information über das Betriebssystem wird meist vom Browser an den besuchten Webserver im http Header im sog. User-Agent String übergeben. Standardmäßig werden diese Informationen auch vom Webserver mit geloggt. Die Strings sehen so oder ähnlich aus:
Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+6.1;+Trident/4.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+Media+Cen…
Da es viele denkbare Kombinationen von OS (+Version), Browser-Software(+Version) sehen diese Strings mitunter sehr unterschiedlich aus. Meist steht die Betriebssysteminformation an derselben Stelle, d.h. man kommt mit folgendem Logparser Beispiel (String-Funktionen) den Betriebsystem auf die Spur:
logparser -i:w3c "Select distinct TRIM(REPLACE_CHR(EXTRACT_TOKEN(cs(User-Agent), 2, ';' ), '+', ' ' )) as [OS],count(*) as [Count] into c:\temp\logfiles\os.csv from c:\temp\logfiles\combined.log group by [OS] order by [Count] DESC" -o:CSV
Obiges Logparser Beispiel erzeugt eine CSV-Datei aus einem W3C Webserver Log welche das OS und die Anzahl der http-Anfragen enthält:
OS,Count
Windows NT 6.1,250789
Windows 98),1063
Linux i686,403
Darüber wird nochmals eine Query gefahren welche über die CASE Funktion die Vielzahl der möglichen Betriebssystem Strings noch weiter kategorisiert und über die Kategorien einen Summe bildet:
logparser "Select CASE SUBSTR( [OS],0, 10) when 'Windows NT' then 'Windows' when 'Intel Mac ' then 'Mac' when 'Linux x86_' then 'Linux' when 'Linux i686' then 'Linux' else 'other' end as [OSS],Sum([Count]) As[SUM] from c:\temp\logfiles\os.csv group by [OSS] order by [SUM] DESC"
Ergebnis:
System SUM Percent
------- ------ ---------
Windows 500475 96.624443
other 14596 2.817984
Mac 2352 0.454090
Linux 536 0.103483
PHP 5.2.x auf IIS mit FastCGI. Anschließend die QDIG Dateien in einen Webordner entpackt. Bildordner angelegt. Seite im IE aufgerufen -> Fehler:
...
PHP Notice: Undefined variable: HTTP_GET_VARS in C:\inetpub\qdig3\index.php on line 578 PHP Notice: Undefined variable: HTTP_POST_VARS in C:\inetpub\qdig3\index.php on line 579 PHP Notice: Undefined variable: HTTP_COOKIE_VARS in C:\inetpub\qdig3\index.php on line 580 PHP Warning: array_merge() [function.array-merge]:
In der php.ini folgenden Eintrag gesetzt:
register_long_arrays = On
und den IIS durchgestartet von der Commandozeile mit iisreset
Anmerkung:
testscript.php:
<?php
echo($HTTP_GET_VARS);
?>
Muss ohne Fehler laufen.
Das Ergebnis wird mit 2 Logparser Beispiel Abfragen oder Schritten durchgeführt:
zu 1.)
logparser -i:W3C "select c-ip,QUANTIZE(Sub(TO_TIMESTAMP( date, MAX(time) ),TO_TIMESTAMP( date, MIN(time) )),10) As [verweildauer] INTO c:\temp\logfiles\verweildauer.csv from c:\temp\logfiles\combined.log group by date,c-ip order by [verweildauer] DESC"
erzeugt CSV Datei mit Werten wie z.B.:
c-ip,verweildauer
192.168.68.67,0000-01-01 00:02:40
192.168.68.11,0000-01-01 00:02:40
192.168.68.37,0000-01-01 00:02:40
zu 2.)
Bei dem System handelt es um 6 Webserver bei denen per DNS round robin eine Lastverteilung erreicht werden soll. Um die Güte / Verhalten der Lastverteilung zu überprüfen wurden die Logdateien der einzelnen Server zusammengeführt (auch mittels logparser) und eine Abfrage über die gesamte Logdatei gefahren.
Folgende Logparser Beispiel Abfrage verwendet die PROPCOUNT Funktion um die Prozent-Werte zu berechnen - das Ganze wird dann noch auf 2 Nachkommastellen gerundet und als Tortengrafik dargestellt:
LogParser.exe -i:W3C "select s-ip,DIV(ROUND(MUL(PROPCOUNT(*), 10000.0)),100) AS Percent into c:\temp\lb.jpg from c:\temp\combined.log group by s-ip order by Percent DESC" -chartType:PieExploded3D -chartTitle:"Loadbalancing (% of Requests)" -view:ON -filetype:jpg -values:on -categories:off
Folgende Logparser Beispiel Abfrage summiert die Werte des sc-bytes Feldes aus der Logdatei in Minutenblöcke 'Quantize(time,60)' rechnet die erhaltene Summe in MBit um rundet ein bisschen und stellt das Ganze als Liniendiagramm dar. Da die Berechnung je nach Logdatei möglicherweise etwas länger dauert kann man den Zeitraum noch etwas eingrenzen:
logparser -i:W3C "SELECT TO_TIMESTAMP(date,QUANTIZE(time, 60)) as [Time],DIV(To_REAL(SUM(sc-bytes)),1024000) As [MBit/min] into c:\temp\MBitperMin.jpg from C:\temp\logfiles\combined.log where date between TIMESTAMP('2009-12-10','yyyy-MM-dd') AND TIMESTAMP('2009-12-11','yyyy-MM-dd') group by s-ip,QUANTIZE(time, 60),date " -o:CHART -chartType:Line -values:OFF -groupSize:1024x768 -view:ON
Hintergrund: Kurz vor dem Peak wurde ein Link zu einem Video an tausende Clients versandt.Sehen wir uns den Peak Zeitraum etwas genauer an:
logparser -i:W3C "SELECT TO_TIMESTAMP(date,QUANTIZE(time, 1)) as [Time],DIV(To_REAL(SUM(sc-bytes)),1024000) As [MBit/sec] into c:\temp\MBitperSec.jpg from C:\temp\logfiles\combined.log where time between TIMESTAMP('09:00:00','hh:mm:ss') AND TIMESTAMP('10:00:00','hh:mm:ss') and date = TIMESTAMP('2009-12-11','yyyy-MM-dd') group by s-ip,QUANTIZE(time, 1),date" -o:CHART -values:OFF -groupSize:1024x768 -view:ON -oTsFormat:'hh:mm:ss' -charttype:Line
Prinzipiell diegleiche Abfrage, nur wurde hier mit -oTSFormat:'hh:mm:ss' die Zeitangaben auf der x-Achse sinnvoller formatiert.
Folgende Logparser Beispiel Abfrage liefert die Top 5 der erreichten http Requests/sec aus der IIS Logdatei, dazu werden die Zeiten mittels Quantize commando in 1-Sekunden-Blöcken zusammengefasst:
liefert:
date Interval Hits/s
---------- -------- ----
2009-12-11 09:07:18 204
2009-12-11 09:04:48 204
2009-12-11 09:06:50 203
2009-12-11 09:04:52 199
2009-12-11 09:07:32 196
Problem:die Logfelder für die Performance counter bleiben leer (ApplicationPoolIdentity):
#Software: IIS Advanced Logging Module
#Version: 1.0
#Start-Date: 2009-12-04 10:21:05.973
#Fields: cs-uri-stem W3WP-PrivateBytes TimeTakenMS CPU-Utilization
/default.aspx - 10240 –
Abhilfe: Nachdem die Application Pool Identität auf den NetworkService gesetzt wurde werden die Einträge mitgeloggt:
#Start-Date: 2009-12-04 10:16:13.627
/default.aspx 40357888 10350 53.58
Cd %SystemRoot%\system32\wbem\
wmic nicconfig where "caption like '%Local Area Connection%'" call EnableStatic ("192.168.2.5"), ("255.255.255.0")
Anm: Sucht nach Adapter mit dem ungefähren Namen „Local Area Connection“ d.h. auch „Local Area Connection 2“ würde da eine statische IP verpasst kriegen.
Ausgabe:
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Anderer Return code -> bist Du wirklich Admin?
Das DDC Toolkit findet man im Internet unter:
1) Dynamic Data Center Toolkit for Hosters auf der MSDN Code Library, oder
2) (mühsamer) als Bestandteil des Hosting Deployment Accelerators (aka "HDA"):
um an den angepriesenen Demo Code, z.B. das auf Silverlight basierende Contoso Hosting Portal zu gelangen:
windowshda.com -> run -> startet eine .hta file mit den Inhalten (benötigt Silverlight)
->
und von hier aus lassen sich die Sample Codes und Docs des DDC's herunterladen:
Screenshot des auf Silverlight basierenden Contoso Hosting Customer Panel:
bin gerade drüber gestolpert (noch nicht ausprobiert):
http://www.microsoft.com/downloads/details.aspx?FamilyID=C8498C9B-A85A-4AFA-90C0-593D0E4850CB&displaylang=en
Heute php 5.3 von windows.php.net heruntergeladen (installer) und auf IIS7 eingerichtet
phpinfo(); erzeugt mir http 500 er Fehler -> IIS7 tracing ergibt:
ModuleName FastCgiModuleData1 FASTCGI_RESPONSE_ERRORData2 PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Paris' for '2.0/DST' instead in C:\inetpub\testsite\index.php on line 3ErrorCode 5ErrorCode Access is denied. (0x5)
In der php.ini
date.timezone = "Europe/Berlin"
(anschließend alle php-cgi.exe beendet)Anm.: http://ie.php.net/manual/en/timezones.europe.php
Folgende Logparser Beispiel Abfrage - stellt die Top 10 (nach Anzahl) erfolgreicher Downloads von gefilterter Dateien (*.msi,*.zip,...) aus einer Web Server Log Datei als Balkendiagramm dar, aufgelistet nach Anzahl und Teil der URL.
logparser -i:W3C "select top 10 Distinct EXTRACT _SUFFIX(cs-uri-stem,0,'/'),count(*) As [Number of Downloads] into c:\work\downloads_web.jpg from c:\inetpub\logs\logfiles\W3SVC1\*.log Where sc-status = 200 AND (cs-uri-stem like '%msi%' OR cs-uri-stem like '%zip%' OR cs-uri-stem like '%exe%' OR cs-uri-stem like '%msu%') AND NOT cs-uri-stem like '%RaktajinoSetup.msi%' AND cs-uri-stem like '%webapps%' Group By cs-uri-stem Order by [Number of Downloads] DESC" -o:CHART -chartType:Column3D -values:ON -groupSize:1024x768 -view:ON -fileType:JPG
Folgende Logparser Beispiel Abfrage ermittelt die HTTP status codes aus einer Logdatei summiert diese jeweils auf und stellt das Ganze als Kuchendiagramm dar:
logparser -i:W3C "select sc-status, Count(*) As [Count] into c:\work\status.jpg from c:\inetpub\logs\logfiles\W3SVC1\*.log group by sc-status Order by [Count] DESC" -chartType:PieExploded3D -chartTitle:"StatusCodes" -view:ON -filetype:jpg
Folgendes Kommando:
netsh http show cachestate
liefert z.B:
Snapshot of HTTP response cache:
--------------------------------
URL: http://localhost:80/welcome.png
Status code: 200
HTTP verb: GET
Cache policy type: User invalidates
Creation time: 2009.1.15:17.33.14:0
Request queue name: DefaultAppPool
Content type: image/png
Content encoding: (null)
Headers length: 187
Content length: 184946
Hit count: 23
Force disconnect after serving: FALSE
Für alle die ab und an php auf windows manuell einrichten und sich fragen welche settings man nochmal am besten in der php.ini Datei machen sollte.
Setting
Description
safe_mode=Offsafe_mode_gid=Off
Disable safe mode
open_basedir="c:\inetpub\"
Restrict where PHP processes can read and write on a file system.
expose_php=Off
Hide presence of PHP
max_execution_time=30max_input_time=60
Limit script execution time
memory_limit=16Mupload_max_filesize=2Mmax_input_nesting_levels=64
Limit memory usage and file sizes
display_errors=Offlog_errors=Onerror_log="C:\path\of\your\choice\error.log"
Configure error messages and logging. You can set display_errors=On for developer machine on a server you should turn it off.
Make sure the IIS application pool identity has write access to the log file.
register_globals=Off
This setting disables register_globals, which prevents PHP from injecting your scripts with global variables that are defined based on Web request data.
post_max_size=8M
Sets max size of post data allowed. This setting also affects file upload.
extension_dir
This setting specifies a location for PHP extensions. Typically for PHP 5.2.x,you use the following values for this setting: extension_dir="./ext" -or- extension_dir="C:\Program Files\PHP\ext"
cgi.force_redirect=0
You must turn this off under IIS. Left undefined, PHP will turn this on by default. IIS takes care of CGI handling.
cgi.fix_pathinfo=1
This provides PATH_INFO/PATH_TRANSLATED support for CGI. The previous behavior of the PHP CGI module was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to ignore the PATH_INFO setting. For information about PATH_INFO, see the CGIspecification. Changing this setting to 1 causes the PHP CGI to fix its paths toconform to the specification.
fastcgi.impersonate=1
FastCGI under IIS supports the ability to impersonate security tokens of the calling client. This setting allows IIS to define the security context that the request runs under. |
fastcgi.logging=0
A PHP request to the IIS FastCGI module will fail if any data is sent on stderr by using the FastCGI protocol. DisablingFastCGI logging prevents PHP from send- ing error information over stderr, whichprevents the Web server from sending HTTP 500 response codes to the client.
upload_tmp_dir
The temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as. If not specified PHP will use the system's default (%systemroot%\temp).
Sample: upload_tmp_dir="C:\php\tmp"
allow_url_fopen=Offallow_url_include=Off
Disable remote URLs for file handling functions, which may cause code injection vulnerabilities.
date.timezone
The default timezone used by all date/time functions if the TZ environment variable isn't set. The precedence order is described in the date_default_timezone_get() page. See List of Supported Timezones for a list of supported timezones.
Annot: Seen this to cause http 500 errors on iis via fastcgi if missing. Sample value e.g. date.timezone = "Europe/Berlin"
session.save_path
session.save_path defines the argument which is passed to the save handler. If you choose the default files handler, this is the path where the files are created. This directory must not be a world-readable directory (i.e. don't publish via WWW)
Sample: session.save_path ="C:\php\session"
Quellen:
http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/#PHP_Security_Recommendations_
http://www.phparch.com/c/magazine/issue/97
Folgende Logparser Beispiel Abfrage ermittelt aus mehreren Log Dateien den ersten und letzten Eintrag anhand des Datum-Feldes und errechnet die Differenz:
logparser.exe -i:W3C "select MIN(distinctdate) As BeginDate,MAX (distinct date) As EndDate, SUB(TO_DATE(MAX (distinct date)),TO_DATE(MIN (distinct date))) As Diff from c:\inetpub\logs\logfiles\W3SVC1\*.log
liefert z.B.:
BeginDate EndDate Diff
---------- ---------- ----------
2009-05-11 2009-06-09 0000-01-30
Elements processed: 2208
Execution time: 0.42 seconds