0

Интересно, может ли кто-нибудь помочь. Создание PowerShell XML из информации о почтовом ящике Exchangepowershell создает xml и родительские и дочерние элементы, если они не существуют

Мне сообщили о требовании, в котором нам необходимо провести аудит доступа к каждому почтовому ящику в нашей среде Exchange. Мне удалось захватить каждый почтовый ящик и добавить в XML, проблема у меня - это все остальное! Для каждого почтового ящика, мне нужно сделать следующий

  • получить DisplayName, PrimarySMTP, Алиас
  • чек, если почтовый ящик уже находится в файле XML, если не добавить <Mailbox DisplayName="Jerry The Mouse" PrimarySMTP="[email protected]" 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 является Enabl ред
  • проверка, если MAPI в разделе почтового ящика уже в файле XML, если не добавить <Access ServiceName="MAPI" />
  • получить текущий день месяца и добавить запись в IMAP <Report Day="DAY of REPORT" Enabled="true/false" />
  • Когда закончите, сохраните XML

Мне не нужна помощь со стороны Exchange, просто создание элементов (если они не существуют) согласно моему списку выше!
Файл XML будет уничтожен в первый день следующего месяца.
Причина для формата связана с дополнительным требованием от другого отдела, который возьмет xml и рисует графики для количества дней в этом месяце. Надеясь кто-то может помочь

Благодарности

Копия XML должен выглядеть следующим образом.

<root> 
    <Mailbox DisplayName="Jerry The Mouse" PrimarySMTP="[email protected]" 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="[email protected]" 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

Вы можете проверить, существуют ли узлы с помощью 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 = '[email protected]' 
# 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) 

Добавление нового элемента в элементе почтового ящика/доступа:

# 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) 
+0

Спасибо за ответ. Я не буду смотреть на это до понедельника/вторника, поскольку я путешествую по Microsoft FutureDecoded! – jasonrose

+0

Спросите Стивена Хокинга, может ли он запросить данные XML с помощью XPATH! –

+0

Ха-ха! Я бы, но я не буду там в День 1! – jasonrose