Удаление текста перед определенным символом в скрипте PowerShell - PullRequest
0 голосов
/ 24 апреля 2019

Я экспортирую элементы в списке SharePoint в массив, а затем помещаю их в электронную почту в таблице. Поле имени SharePoint содержит дополнительные символы (я думаю, ID пользователя) перед отображаемым именем, которое я не могу обрезать / удалить до его вывода в массив, а затем добавить в электронную почту.

Я попытался использовать несколько вариантов ниже, но я не думаю, что это работает для уже созданного массива:

(Get-Content $outputfile) |
    Select-String -Pattern '*#' -NotMatch |
    Out-File $outputfile

а также:

(Get-Content $outputfile) |
    Where-Object { $_.Trim() -ne "" } |
    Set-Content $outputfile

Сценарий выглядит следующим образом:

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"]
    $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)

Пример вывода таблицы показывает:

Name          Reason              Example         Created
64;#Test User   testing reason    testing example   17/04/2019 4:28:33 a.m.
105;#John Smith test for reason   more testing for example more testing for example more testing for example    17/04/2019 4:29:24 a.m.

1 Ответ

0 голосов
/ 24 апреля 2019

Если речь идет только об удалении нежелательных символов с префиксом имени пользователя, вы можете просто удалить их, используя

$ExportItem | Add-Member -MemberType NoteProperty -Name "Name" -Value ($_["Name"] -replace '^\d+;#')

Кстати, если вы используете PowerShell 3.0 или выше, есть более простой способ создания объектов

$ListItemCollection = $list.Items | ForEach-Object {
    [PSCustomObject]@{
        'Name'    = $_["Name"] -replace '^\d+;#'
        'Reason'  = $_["Reason"]
        'Example' = $_["Example"]
        'Created' = $_["Created"]
    }

Или даже (не проверено)

$ListItemCollection = $list.Items | Select-Object @{Name = 'Name'; Expression = {$_["Name"] -replace '^\d+;#'}},
                                                  Reason, Example, Created

Надеюсь, это поможет

...