2017-08-08 99 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 ')。 –