我想知道是否有人可以提供帮助。 PowerShell从Exchange邮箱信息创建XML
我被告知需要审核Exchange环境中每个邮箱的访问权限。 我设法抓住每个邮箱并添加到XML,我的问题是其余的! 对于每个邮箱,我需要执行以下操作
- 获取DisplayName,PrimarySMTP,Alias
- 检查邮箱是否已在XML文件中,如果不是
<Mailbox DisplayName="Jerry The Mouse" PrimarySMTP="jerrythemouse@domain.com" Alias="jerrythemouse" />
- 检查OWA已启用
- 检查邮箱部分中的OWA是否已经在XML文件中,如果没有添加
<Access ServiceName="OWA" />
- 获取当月的当天并向OWA添加条目
<Report Day="DAY of REPORT" Enabled="true/false" />
- 检查IMAP是否已启用
- 检查邮箱部分中的IMAP是否已存在于XML文件中,如果未添加
<Access ServiceName="IMAP" />
- 获取当月的当天,并将条目添加到IMAP
<Report Day="DAY of REPORT" Enabled="true/false" />
- 检查POP已启用
- 检查邮箱部分中的POP是否已存在于XML文件中,如果未添加
<Access ServiceName="POP" />
- 获取当月的当天,并将条目添加到IMAP
<Report Day="DAY of REPORT" Enabled="true/false" />
- 检查MAPI已启用
- 检查邮箱部分中的MAPI是否已存在于XML文件中,如果未添加
<Access ServiceName="MAPI" />
- 获取当月的当天,并将条目添加到IMAP
<Report Day="DAY of REPORT" Enabled="true/false" />
- 完成后,保存XML
我不需要Exchange方面的帮助,只需按照上面的列表创建元素(如果它们不存在)!
XML文件将在下个月的第1天被删除
格式的原因是因为另一个部门的额外要求将采用xml并绘制月份的天数。
希望有人可以提供帮助
谢谢
xml的副本应如下所示。
<root>
<Mailbox DisplayName="Jerry The Mouse" PrimarySMTP="jerrythemouse@domain.com" Alias="jerrythemouse">
<Access ServiceName="OWA">
<Report Day="01" Date="01/10/2016" Enabled="true" />
<Report Day="02" Date="02/10/2016" Enabled="true" />
<Report Day="03" Date="03/10/2016" Enabled="false" />
</Access>
<Access ServiceName="IMAP">
<Report Day="01" Date="01/10/2016" Enabled="false" />
<Report Day="02" Date="02/10/2016" Enabled="false" />
<Report Day="03" Date="03/10/2016" Enabled="false" />
</Access>
<Access ServiceName="POP">
<Report Day="01" Date="01/10/2016" Enabled="true" />
<Report Day="02" Date="02/10/2016" Enabled="true" />
<Report Day="03" Date="03/10/2016" Enabled="true" />
</Access>
<Access ServiceName="MAPI">
<Report Day="01" Date="01/10/2016" Enabled="true" />
<Report Day="02" Date="02/10/2016" Enabled="true" />
<Report Day="03" Date="03/10/2016" Enabled="true" />
</Access>
</Mailbox>
<Mailbox DisplayName="Tom The Cat" PrimarySMTP="tomthecat@domain.com" Alias="tomthecat">
<Access ServiceName="OWA">
<Report Day="01" Date="01/10/2016" Enabled="true" />
<Report Day="02" Date="02/10/2016" Enabled="true" />
<Report Day="03" Date="03/10/2016" Enabled="false" />
</Access>
<Access ServiceName="IMAP">
<Report Day="01" Date="01/10/2016" Enabled="false" />
<Report Day="02" Date="02/10/2016" Enabled="false" />
<Report Day="03" Date="03/10/2016" Enabled="false" />
</Access>
<Access ServiceName="POP">
<Report Day="01" Date="01/10/2016" Enabled="true" />
<Report Day="02" Date="02/10/2016" Enabled="true" />
<Report Day="03" Date="03/10/2016" Enabled="true" />
</Access>
<Access ServiceName="MAPI">
<Report Day="01" Date="01/10/2016" Enabled="true" />
<Report Day="02" Date="02/10/2016" Enabled="true" />
<Report Day="03" Date="03/10/2016" Enabled="true" />
</Access>
</Mailbox>
...
</root>
答案 0 :(得分:1)
您可以使用XPath查询检查节点是否存在:
$xml = [xml](Get-Content $filename)
$xml.SelectNodes("//root/Mailbox[@DisplayName='Jerry The Mouse']").Count
1
$xml.SelectNodes("//root/Mailbox[@DisplayName='Jerry The Mouse']/Access[@ServiceName='OWA']").Count
1
也就是说,如果这不是零,那么该节点至少存在一次。
添加新元素更加费力:
# Adding a new mailbox
$newMbx = $xml.CreateElement('Mailbox')
$attDisplayName = $xml.CreateAttribute('DisplayName')
$attPrimarySmtp = $xml.CreateAttribute('PrimarySmtp')
# etc.
$attDisplayName.Value = 'Spike The Dog'
$attPrimarySmtp.Value = 'SpikeTheDog@domain.com'
# etc.
$newMbx.Attributes.Append($attDisplayName)
$newMbx.Attributes.Append($attPrimarySmtp)
# etc.
$newSvc = $xml.CreateElement('Access')
$attServiceName = $xml.CreateAttribute('ServiceName')
$attServiceName.Value = 'OWA'
$newSvc.Attributes.Append($attServiceName)
# Add this back into the XML document:
$xml.LastChild.Append($newMbx)
在Mailbox / Access元素中添加新元素:
# Create a new $record XML element using the technique above
# Add this new element to an existing XML element:
$xml.SelectNodes("//root/Mailbox[@DisplayName='Spike The Dog']/Access[@ServiceName='OWA']").AppendChild($record)