【发布时间】:2016-06-28 02:12:44
【问题描述】:
我有一个包含用户名的非常基本的文本文件。我需要能够搜索以“User bsmith”开头的每个部分(例如),复制后面的所有文本并在下一个“User XXXX”(用户 tford,例如下面)之前的行结束。然后,我会将复制的文本粘贴到电子邮件正文中。我已经编写了 Powershell 来创建电子邮件并发送它。我只需要编写部分来从列出的文本文件中获取文本。编程还是新手,因此很难确定从 .txt 文件中搜索和复制并粘贴到电子邮件正文中的方式。 svnlog.txt 是被解析的文件。我可以获取所有内容,但需要能够搜索每个“用户 XXXX”到下一个“用户 XXX”的部分。
$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 = "bsmith@company.com;tford@company.com"
$NewMail.VotingOptions = "Accept;Reject"
$NewMail.Send()
我正在考虑使用以下方法搜索单个“用户 XXX”组,但我再次不确定这是否是正确的路径,甚至是否可行。
$fullsvn = Get-Content "C:\Dev\Powershell\svnlog.txt"
Out-File () "C:\Dev\Powershell\svnlogBSmith.txt"
文本文件内容格式如下。
用户 BSmith
回购
[功能规格:/]
@admins = rw
@dba = r
@hca = rw
@businessAnalysts = rw
@qa = rw
@portal = rw
@intercept = rw
@pmo = rw
[restrictedDocs:/softtek]
@restrictedDocs = rw
组
BusinessAnalysts = ajones, pjohnson, ssmith, rjackson,
@pmo = 弗格森
用户 tford
好的。所以我尝试了 TessellatingHeckler 的路线。但是,它似乎没有用用户名标记行(在这种情况下,它是 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
输出:
名称值
---- -----
标记
物品 - - - - - - - - - - - - - - - - - - - - - - - - - -------------------------------------------
标记
项目用户
标记
物品 tkelems:
标记
项目
标记
项目回购
标记
项目 --------------------
标记
项目 [功能规格:/]
标记
项目@admins = rw
标记
项目@eclas = rw
标记
项目@cfis = rw
标记
项目@transMgmt = rw
标记
项目@dba = r
标记
项目@hca = rw
标记
项目@businessAnalysts = rw
标记
项目@qa = rw
标记
项目@portal = rw
标记
项目@intercept = rw
标记
我也忘记添加在最后一行创建的 Ou-File 的内容。也不知道该怎么做。基本上,控制台中没有显示任何标签,输出文件显示完全不同的东西(见下文):
IsReadOnly : 假
IsFixedSize : 假
IsSynchronized : 假
键:{标签,项目}
值:{$null, ----------------------------------------- ---------------------------------------}
SyncRoot : System.Object
计数:2
IsReadOnly : 假
IsFixedSize : 假
IsSynchronized : 假
键:{标签,项目}
值:{$null, 用户}
SyncRoot : System.Object
计数:2
【问题讨论】:
-
请跳过文本文件
-
您没有在脚本中的任何位置分配
$TKelems...它甚至有任何内容吗?写第一行$TKelems = Get-Content ... | Foreach {试试看。 -
好的。谢谢。我认为在最后一行用管道处理它会解决这个问题。我试试看。
-
这没有帮助。问题是我需要将 $TKelems 定义为带有 tkelems 标签的数据。我认为在第一行定义它不适用于文件中列出的其余“用户”。此外,我忘记添加创建的 Out-File 的内容。这已添加到帖子中。
-
在第一行定义 $TKelems ($TKelems = gc .\log.txt) 生成包含所有值的输出。如您所见,标签键值也在那里显示为 null。不知道为什么这没有标记任何东西。
标签: email powershell svn outlook