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 }