У меня есть очень простой текстовый файл, содержащий имена пользователей. Мне нужно иметь возможность искать каждый раздел, который начинается с «User bsmith» (например), скопировать весь текст, который следует, и закончить в строке, предшествующей следующему «Пользователь XXXX» (например, пользователь tford, например, ниже). Затем я вставляю скопированный текст в тело письма. Я уже написал Powershell, чтобы создать электронное письмо и отправить его. Мне просто нужно написать часть, чтобы захватить текст из указанного текстового файла. Все еще нова к программированию, поэтому трудно определить способ поиска и копирования из файла .txt и вставки в тело электронной почты. Файл svnlog.txt - это файл, обрабатываемый. Я могу получить весь контент, но должен иметь возможность искать разделы для каждого «Пользователь XXXX» для следующего «Пользователь XXX».Powershell - нужно разобрать текстовый файл и прошлое по электронной почте
$olComObject = new-object -comobject outlook.application
$svn = (Get-Content C:\Dev\Powershell\svnlog.txt) -join "`n"
$NewMail = $olComObject.CreateItem(0)
$NewMail.Subject = "Testing Voting Options"
$NewMail.Body = "Please use the attached voting buttons in this email to acknowledge or reject if the following user permissions are correct!" + "`n" + $svn
$NewMail.To = "[email protected];[email protected]"
$NewMail.VotingOptions = "Accept;Reject"
$NewMail.Send()
Я думал, возможно, в поисках личности «XXX пользователя» группы, используя следующие, но опять же я не уверен, что это правильный путь, чтобы идти или даже работать.
$fullsvn = Get-Content "C:\Dev\Powershell\svnlog.txt"
Out-File() "C:\Dev\Powershell\svnlogBSmith.txt"
Формат текстового файла выглядит следующим образом.
BSmith пользователя
РЕПО
[functionalSpecs: /]
@admins = RW
@dba = г
@hca = RW
@businessAnalysts = rw
@qa = RW
@portal = RW
@intercept = RW
@pmo = RW
[restrictedDocs:/softtek]
@restrictedDocs = RW
Группы
BusinessAnalysts = ajones, pjohnson, ssmith, rjackson,
@pmo = lferguson
пользователя tford
ОК. Поэтому я попробовал маршрут ТесселлингаХеклера. Однако, похоже, это не тегирование строк с именем пользователя (в данном случае это TKelems вместо BSmith). Вот мой текущий код и пример вывода, который я получаю в консоли.
Get-Content C:\Dev\Powershell\svnlog.txt | foreach {
if ($_ -match '^User (.*)') {
$tag = $matches[1]
}
[Management.Automation.PSObject]@{
Tag=$tag
Item=$_
}
}
$TKelems | Where Tag -EQ 'tkelems'
Out-File "C:\Dev\Powershell\svnlogTKelems.txt" -InputObject $TKelems
Выход:
Название Значение
---- -----
Tag
товара ------------------ -------------------------------------------------- ------------
Tag
Пункт пользователя
Tag
Предмет tkelems:
Tag
Item
Tag
Пункт Repos
Tag
товара --------------------
Tag
Item [functionalSpecs: /]
@admins Tag
товара = RW
Tag
товара @eclas = RW
Tag
Item @cfis = RW
Метка
товара @transMgmt = RW
Метка
товара @dba = г
Метка
товара @hca = RW
@businessAnalysts Тэг
Предмет = RW
Метка
товара @qa = RW
Код
Продукт @portal = rw
Отмеченный
Пункт @intercept = rw
Тег
Я также забыл добавить содержимое Ou-файла, созданного в последней строке. Не уверен, что с этим делать. В принципе, теги не отображалось в консоли, а выходной файл показывает что-то совершенно другое (смотрите ниже):
IsReadOnly: Ложные
IsFixedSize: Ложные
IsSynchronized: Ложные
Ключи: { Тег, пункт}
Значения: {$ null, ------------------------------------ --------------------------------------------}
SyncRoot: система.Объект
Количество: 2
IsReadOnly: Ложные
IsFixedSize: Ложные
IsSynchronized: Ложные
Ключи: {Tag, Предмет}
значения: {$ нуль, Пользователь}
SyncRoot: System .Object
Количество: 2
пожалуйста, мимо текстового файла –
Вы не присваивающей '$ TKelems' где-нибудь в вашем сценарии ... как это даже любой контент вообще? Сделайте первую строку '$ TKelems = Get-Content ... | Foreach {'и попробуйте. – TessellatingHeckler
Хорошо. Благодарю. Я думал, что в последней строке это будет позаботиться об этом. Я попробую. – ClaySean