Taylohtio/_Scripts/LomakkeetCrawler/LomakkeetCrawler.ps1

92 lines
2.1 KiB
PowerShell

param(
[Parameter(Mandatory=$true)]
[string]$siteColUrl,
[Parameter(Mandatory=$true)]
[string]$query
)
function LogLink($list, $item, $outputFileName)
{
$uri = [System.Uri]$list.ParentWeb.Url
$url = [System.String]::Format("{0}://{1}{2}?ID={3}", $uri.Scheme, $uri.Host, $list.DefaultDisplayFormUrl, $item.ID)
Write-Host $url
($url) | Out-File $outputFileName -append
}
function CrawlList($list, $query, $outputFileName)
{
if ($list.BaseType -eq "1")
{
#skip doclibs
return
}
Write-Host "Crawling list"$list.Title"..." -foregroundcolor green
$query = $query.ToLower()
foreach ($item in $list.Items)
{
foreach ($field in $list.Fields)
{
if ($field.Hidden)
{
continue
}
if ($field.Type -eq "Text" -or $field.Type -eq "Note")
{
$val = $item[$field.InternalName]
if ([System.String]::IsNullOrEmpty($val))
{
continue
}
if ($val.ToLower().Contains($query))
{
LogLink $list $item $outputFileName
}
}
elseif ($field.Type -eq "User")
{
$val = $field.GetFieldValue($item[$field.InternalName])
if ($val -eq $null)
{
continue
}
$user = $val.User
if ($user -eq $null)
{
continue
}
if ((-not [System.String]::IsNullOrEmpty($user.LoginName)) -and $user.LoginName.ToLower().Contains($query))
{
LogLink $list $item $outputFileName
}
elseif ((-not [System.String]::IsNullOrEmpty($user.Name)) -and $user.Name.ToLower().Contains($query))
{
LogLink $list $item $outputFileName
}
elseif ((-not [System.String]::IsNullOrEmpty($user.Email)) -and $user.Email.ToLower().Contains($query))
{
LogLink $list $item $outputFileName
}
}
}
}
}
$site = Get-SPSite $siteColUrl
$lomakkeet = $null
foreach ($web in $site.RootWeb.Webs)
{
if ($web.Url.ToLower().EndsWith("/lomakkeet"))
{
$lomakkeet = $web
}
}
if ($lomakkeet -eq $null)
{
Write-Host "Lomakkeet site not found" -foregroundcolor red
return
}
$outputFileName = [System.String]::Format("output_{0}.txt", [System.DateTime]::Now.ToString("yyyyMMdd_HHmmss"))
$lomakkeet.Lists | ForEach-Object { CrawlList $_ $query $outputFileName }