Извлекать list.items из определенного представления вместо всех элементов - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь экспортировать элементы в массиве сценариев powershell sharepoint 2013, которые можно извлечь только из определенного пользовательского представления в списке.Я создал представление, отображающее «Текущий месяц» - элементы, созданные только в текущем календарном месяце.Все предыдущие пункты остаются в списке, но мы хотим видеть и работать только с теми, которые были введены в этом месяце.

Я пробовал следовать приведенному ниже и многим его вариантам: https://sharepoint.stackexchange.com/questions/134830/powershell-script-to-get-items-only-in-a-particular-view-of-sharepoint-list-libr

$list = $web.Lists["testlist"]
$view = $list.Views["Current Month"]
$items = $list.GetItems($view)

#Array to Hold Result - PSObjects
$ListItemCollection = @()

$items.Items | foreach {

Приведенный ниже код отлично работает, чтобы все элементы в списке и электронное письмо отправлялись нормально.

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

$web = Get-SPWeb -Identity "https://sharepointsite.com"
$list = $web.Lists["testlist"]

#Array to Hold Result - PSObjects
$ListItemCollection = @()

$list.Items | foreach {
    $ExportItem = New-Object PSObject 
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Name" -Value ($_["Name"] -replace '^\d+;#')
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Reason" -Value $_["Reason"]
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Example" -Value $_["Example"]
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Created" -Value $_["Created"]

    $ListItemCollection += $ExportItem
}

$web.Dispose()

$emailbody = $(cat C:\temp\emailbody.txt) + $ListItemCollection

#Email formatting
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"

$SMTPServer = "mail.com"
$EmailFrom = "test@mail.com" 
$EmailTo = "joel@mail.com"
$EmailSubject = "Test Email"

$Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo
$Message.Subject = $EmailSubject
$Message.IsBodyHTML = $true
$message.Body = $emailbody + ($ListItemCollection | ConvertTo-Html -Head $style | Out-String)
$SMTP = New-Object Net.Mail.SmtpClient($SMTPServer)
$SMTP.Send($Message)

Когда я использую код, приведенный выше, он выдает ошибку для каждой из 3 строк добавляемого члена:Невозможно индексировать в пустой массив.

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Хорошо, это то, что сработало:

$view = $list.Views["Current Month"] $items = $list.GetItems($view)

Массив для хранения результата - объекты PSObjects

$ListItemCollection = @()

Получить все элементы списка

$items | foreach {

Когда я использую это для получения из всего списка / всех элементов, он использует:

Массив для хранения результата - объекты PSO

$ListItemCollection = @()

Получить все элементы списка

$list.Items | foreach {

Исправлено удаление ссылки .Items из последней строки.

0 голосов
/ 09 мая 2019

Можете ли вы привести пример $ list.Items?

Как насчет использования foreach ($ item в $ list.items)?

foreach ( $item in $list.Items ) {
    $ExportItem = New-Object PSObject 
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Name" -Value $( $item.name -replace '^\d+;#' )
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Reason" -Value $item.reason
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Example" -Value $item.example
    $ExportItem | Add-Member -MemberType NoteProperty -Name "Created" -Value $item.created

   $ListItemCollection += $ExportItem
}

foreach () {} и ... | foreach {} действуйте по-другому, я знаю, что для этого есть логическая причина, в любом случае я всегда получал то, что хотел из foreach () {}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...