2017-08-08 97 views
0

檢查此邏輯是否有意義或者是否遺漏了某些內容。查找上次訪問的網站

每個IIS站點都有自己的站點ID。該站點擁有基於該站點ID的自己的IIS日誌文件夾。所以如果您的站點ID是2385,那麼您的日誌文件夾是W3SVC2385。

您可以通過運行'%windir%\ system32 \ inetsrv \ appcmd list site'爲您提供站點「站點名稱」(id:####,bindings,State)來在命令行中獲取每個站點的站點ID )

通過將數據拉入文件,應該能夠隔離站點名稱和ID,然後爲每個IIS日誌文件夾創建一個變量。使用這些信息,您可以從IIS日誌文件夾中提取文件信息。通過查看每個文件夾中最後創建和/或修改的日誌文件的創建/更新日期,是否不應該告訴我們該網站上次訪問的日期?或者我錯過了什麼?

+0

我可能會嘗試使用其他一些cmdlet而不是appcmd。 Get-Website做同樣的事情,通常更易於使用。還有一種簡單的方法可以找出日誌文件的存儲位置,因此您無需使用Get-WebConfigurationProperty對其進行硬編碼。確切的命令是:Get-WebConfigurationProperty -PSPath'MACHINE/WEBROOT/APPHOST'-Filter'system.applicationHost/log/centralW3CLogFile'-Name'directory.value' – Paolis

+0

Paolis - Great tips!謝謝! –

回答

0

所以這裏是我想出的代碼。這隻適用於你的網站名稱也是網站的URL(我們這裏就是這種情況)。它將網站名稱插入網址詞幹的第一部分。

因爲這是針對我們的SharePoint服務器場,我還在LogParser命令中篩選了default.aspx和home.aspx。

使用獲取網站,我得到的網站名稱& ID。我將該名稱添加到網址詞幹中,並使用該ID進入相應的日誌文件夾,然後根據網站名稱創建一個csv文件。

希望這可以幫助別人!

$Sites = Get-WebSite 

foreach ($site in $sites) 
{ 
    $id = $SITE.id 
    $name = $site.name 
    $name = $name -replace '\s','' 
    $filename = $name + '.csv' 
    $logfolder = 'D:\LOGS\IISLOGS\W3SVC' + $id 
    $logpath = $logfolder + "\*.*" 

    & "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -i:iisw3c "SELECT DISTINCT TO_LOWERCASE(cs-uri-stem),max(date) into "$filename" from $logpath WHERE cs-uri-stem LIKE '%Default.asp%' OR cs-uri-stem LIKE '%home.asp%' group by cs-uri-stem" -o:CSV 

    $Content = @() 
    $NewContent = @() 
    $Content = Get-Content $filename 
    foreach ($line in $Content) 
    { 
     $NewContent += $name + $line 
     } 
    $NewContent[0] = "Site URL,DateLastAccessed" 
    $NewContent | Set-Content $filename 
} 
+0

不錯的解決方案。請記住,IISW3C格式還支持指定站點ID(例如'SELECT * FROM <2385>')或站點名稱(例如'SELECT * FROM ')。 –