Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Выборка данных из XML

Ответить
Настройки темы
PowerShell - Выборка данных из XML

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Dim4eg10
Дата: 08-08-2017
Вложения
Тип файла: xml test.xml
(9.6 Kb, 3 просмотров)
Добрый день!
Возникла прям насущная необходимость автоматизации работы с отчетами в XML формате (генерит кучу файлов-отчетов по каждому ПК в сети).
Нужно собрать из каждого файла необходимую информацию (учетные записи администраторов, пароли без ограничения по времени, гостевые учетки и т.д. - Administrators, Password Expiration, Guest Account). Как я вижу механизм разбора:

1. Считываем файл .xml в память
2. по нему проводим разбор интересующих нас вхождений (каждый пункт имеет вид типа Check ID="106" Grade="3" Type="1" Cat="1" Rank="8" Name="Password Expiration").
3. Заносим полученную информацию в новый xml файл
4. Повторяем для каждого файла пункты 1-3.

Не могу добраться до данных, находящихся в разделах XML - (в примере, Check ID="106", Нужны данные по пользователям, находящимся в подразделах <Head> <Col>User</Col> </Head>.
команда
[XML]$c=get-content c:\ps\1\convert.xml
$p=$c.SecScan.Check

не дает мне добраться до необходимых полей (такое впечатление, что они просто обрезаются)


Проблемы, которые я вижу - "вычленить" только необходимые данные из строк, свести их вместе?

Пример .xml файла:
читать дальше »
<SecScan ID="0" DisplayName="test\DC2" Machine="DC2" Date="2017-04-13 12:05:27" LDate="13.04.2017 12:05" Domain="test" IP="192.168.1.242" Grade="1" HotfixDataVersion="2017-04-10T21:31:59Z" MbsaToolVersion="2.3.2211.0" IsWorkgroup="False" SUSServer="" HFFlags="4" SecurityUpdatesScanDone="True" WUSSource="" IsCSAMode="false">
<IPList><IP addr="-1022950926" /></IPList>
<AdditCabs><Cab Prop="" /></AdditCabs>
<Check ID="104" Grade="6" Type="1" Cat="1" Rank="1" Name="Local Account Password Test" URL1="Help/Check5315.html" URL2="Help/Check5315fix.html" >
<Advice>Password checks are not performed on a domain controller.</Advice>
</Check>
<Check ID="10500" Grade="1" Type="5" Cat="1" Rank="1" Name="Security Updates" >
<Advice>Cannot load security CAB file.</Advice>
</Check>
<Check ID="10101" Grade="4" Type="1" Cat="2" Rank="15" Name="Windows Version" URL1="Help/Check53117.html" >
<Advice>Computer is running Microsoft Windows 8.1.</Advice>
</Check>
<Check ID="102" Grade="5" Type="1" Cat="1" Rank="3" Name="File System" URL1="Help/Check5313.html" URL2="Help/Check5313fix.html" >
<Advice>All hard drives (1) are using the NTFS file system.</Advice>
<Detail>
<Head>
<Col>Drive Letter</Col>
<Col>File System</Col>
</Head>
<Row Grade="5">
<Col>C:</Col>
<Col>NTFS</Col>
</Row>
</Detail>
</Check>
<Check ID="106" Grade="3" Type="1" Cat="1" Rank="8" Name="Password Expiration" URL1="Help/Check5317.html" URL2="Help/Check5317fix.html" >
<Advice>Some user accounts (34 of 262) have non-expiring passwords. </Advice>
<Detail text="Accounts with a green check have passwords that do not expire but were specified in NoExpireOk.txt">
<Head>
<Col>User</Col>
</Head>
<Row Grade="3">
<Col>AdmOraMon</Col>
</Row>
<Row Grade="3">
<Col>Barsov-AS</Col>
</Row>
<Row Grade="3">
<Col>CCB</Col>
</Row>
<Row Grade="3">
<Col>Guest</Col>
</Row>
<Row Grade="3">
<Col>Ivanov-AS</Col>
</Row>
<Row Grade="3">
<Col>testDLP</Col>
</Row>
<Row Grade="3">
<Col>OPER1</Col>
</Row>
<Row Grade="3">
<Col>OPER2</Col>
</Row>
<Row Grade="3">
<Col>AlterAgentSrv</Col>
</Row>
<Row Grade="3">
<Col>AlterAgentSrvTest</Col>
</Row>
<Row Grade="3">
<Col>SB</Col>
</Row>
<Row Grade="3">
<Col>SBEA</Col>
</Row>
<Row Grade="3">
<Col>SBEU</Col>
</Row>
<Row Grade="3">
<Col>SYSOPMCI</Col>
</Row>
<Row Grade="3">
<Col>SrvtAgentOnline</Col>
</Row>
<Row Grade="3">
<Col>SysOp</Col>
</Row>
<Row Grade="3">
<Col>admback</Col>
</Row>
<Row Grade="3">
<Col>admbackag</Col>
</Row>
<Row Grade="3">
<Col>altst</Col>
</Row>
<Row Grade="3">
<Col>bellcow</Col>
</Row>
<Row Grade="3">
<Col>bellfish</Col>
</Row>
<Row Grade="3">
<Col>ckfr</Col>
</Row>
<Row Grade="3">
<Col>kav</Col>
</Row>
<Row Grade="3">
<Col>kAdmin</Col>
</Row>
<Row Grade="3">
<Col>kControl</Col>
</Row>
<Row Grade="3">
<Col>kInter</Col>
</Row>
<Row Grade="3">
<Col>kMonitor</Col>
</Row>
<Row Grade="3">
<Col>kOper</Col>
</Row>
<Row Grade="3">
<Col>kTrans</Col>
</Row>
<Row Grade="3">
<Col>kTransport</Col>
</Row>
<Row Grade="3">
<Col>qurto</Col>
</Row>
<Row Grade="3">
<Col>scom</Col>
</Row>
<Row Grade="3">
<Col>scom_sql</Col>
</Row>
<Row Grade="3">
<Col>useruit</Col>
</Row>
<Row Grade="5">
<Col>SUPPORT_388945a0</Col>
</Row>
</Detail>
</Check>
<Check ID="107" Grade="5" Type="1" Cat="1" Rank="5" Name="Guest Account" URL1="Help/Check5318.html" URL2="Help/Check5318fix.html" >
<Advice>The Guest account is disabled on this computer.</Advice>
</Check>
<Check ID="110" Grade="5" Type="1" Cat="1" Rank="4" Name="Autologon" URL1="Help/Check5319.html" URL2="Help/Check5319fix.html" >
<Advice>Autologon is not configured on this computer.</Advice>
</Check>
<Check ID="117" Grade="5" Type="1" Cat="1" Rank="6" Name="Restrict Anonymous" URL1="Help/Check53110.html" URL2="Help/Check53110fix.html" >
<Advice>Computer is properly restricting anonymous access.</Advice>
</Check>
<Check ID="118" Grade="5" Type="4" Cat="1" Rank="10" Name="IE Zones" URL1="Help/Check53111.html" URL2="Help/Check53111fix.html" >
<Advice>Internet Explorer zones have secure settings for all users.</Advice>
</Check>
<Check ID="119" Grade="4" Type="1" Cat="2" Rank="12" Name="Auditing" URL1="Help/Check53114.html" URL2="Help/Check53114fix.html" >
<Advice>Logon Success auditing is enabled, however Logon Failure auditing should also be enabled.</Advice>
</Check>
<Check ID="121" Grade="4" Type="1" Cat="2" Rank="14" Name="Shares" URL1="Help/Check53115.html" URL2="Help/Check53115fix.html" >
<Advice>7 share(s) are present on your computer. </Advice>
<Detail text="Access: F - Full, R - Read, W - Write, D - Delete, X - Execute, C - Change">
<Head>
<Col>Share</Col>
<Col>Directory</Col>
<Col>Share ACL</Col>
<Col>Directory ACL</Col>
</Head>
<Row Grade="4">
<Col>ADMIN$</Col>
<Col>C:\Windows</Col>
<Col>Admin Share</Col>
<Col>NT AUTHORITY\Authenticated Users - RX, BUILTIN\Server Operators - RWXD, BUILTIN\Administrators - F, NT AUTHORITY\SYSTEM - F, NT SERVICE\TrustedInstaller - F</Col>
</Row>
<Row Grade="4">
<Col>C$</Col>
<Col>C:\</Col>
<Col>Admin Share</Col>
<Col>NT AUTHORITY\SYSTEM - F, BUILTIN\Administrators - F, BUILTIN\Users - RX</Col>
</Row>
<Row Grade="4">
<Col>NETLOGON</Col>
<Col>C:\Windows\SYSVOL\sysvol\test.local\SCRIPTS</Col>
<Col>Everyone - R, Administrators - F</Col>
<Col>NT AUTHORITY\Authenticated Users - RX, BUILTIN\Server Operators - RX, BUILTIN\Administrators - F, NT AUTHORITY\SYSTEM - F</Col>
</Row>
<Row Grade="4">
<Col>SYSVOL</Col>
<Col>C:\Windows\SYSVOL\sysvol</Col>
<Col>Everyone - R, Administrators - F, NT AUTHORITY\Authenticated Users - F</Col>
<Col>NT AUTHORITY\Authenticated Users - RX, BUILTIN\Server Operators - RX, BUILTIN\Administrators - F, NT AUTHORITY\SYSTEM - F</Col>
</Row>
<Row Grade="4">
<Col>dfs</Col>
<Col>c:\DFSTEST</Col>
<Col>Everyone - R</Col>
<Col>NT AUTHORITY\SYSTEM - F, BUILTIN\Administrators - F, BUILTIN\Users - RX</Col>
</Row>
<Row Grade="4">
<Col>dfs_adm</Col>
<Col>c:\DFSADM</Col>
<Col>Everyone - R</Col>
<Col>NT AUTHORITY\SYSTEM - F, BUILTIN\Administrators - F, BUILTIN\Users - RX</Col>
</Row>
<Row Grade="4">
<Col>print$</Col>
<Col>C:\Windows\system32\spool\drivers</Col>
<Col>Everyone - R, Administrators - F</Col>
<Col>Everyone - RX, BUILTIN\Print Operators - F, NT AUTHORITY\Authenticated Users - RX, BUILTIN\Server Operators - RWXD, BUILTIN\Administrators - F, NT AUTHORITY\SYSTEM - F</Col>
</Row>
</Detail>
</Check>
<Check ID="122" Grade="3" Type="1" Cat="1" Rank="7" Name="Administrators" URL1="Help/Check5316.html" URL2="Help/Check5316fix.html" >
<Advice>More than 2 Administrators were found on this computer.</Advice>
<Detail>
<Head>
<Col>User</Col>
</Head>
<Row Grade="3">
<Col>TEST\Enterprise Admins</Col>
</Row>
<Row Grade="3">
<Col>TEST\LocalAdminsTEST</Col>
</Row>
<Row Grade="3">
<Col>TEST\useruit</Col>
</Row>
</Detail>
</Check>
<Check ID="10124" Grade="6" Type="4" Cat="1" Rank="11" Name="Macro Security" >
<Advice>No supported Microsoft Office products are installed.</Advice>
</Check>
<Check ID="10123" Grade="4" Type="1" Cat="2" Rank="13" Name="Services" URL1="Help/Check53116.html" >
<Advice>No potentially unnecessary services were found.</Advice>
</Check>
<Check ID="10178" Grade="4" Type="1" Cat="1" Rank="9" Name="Windows Firewall" >
<Advice>This check was skipped because it cannot be done remotely.</Advice>
</Check>
<Check ID="179" Grade="2" Type="1" Cat="1" Rank="10" Name="Automatic Updates" URL1="Help/Check53178.html" URL2="Help/Check53178fix.html" >
<Advice>The Automatic Updates system service is not running.</Advice>
</Check>
<Check ID="180" Grade="3" Type="1" Cat="1" Rank="10" Name="Incomplete Updates" URL1="Help/Check5340.html" URL2="Help/Check5340fix.html" >
<Advice>A previous software update installation was not completed. You must restart your computer to finish the installation. If the incomplete installation was a security update, then the computer may be at risk until the computer is restarted.</Advice>
</Check>
<Check ID="10219" Grade="6" Type="2" Cat="4" Rank="0" Name="SQL Server/MSDE Status" >
<Advice>SQL Server and/or MSDE is not installed on this computer.</Advice>
</Check>
<Check ID="10314" Grade="6" Type="3" Cat="4" Rank="1" Name="IIS Status" >
<Advice>IIS is not running on this computer.</Advice>
</Check>
<Composite>41</Composite>
</SecScan>


Если у кого есть готовые механизмы, или хотя бы сможет подробно показать/объяснить как работать с разбором такого типа - буду крайне признателен!

Отправлено: 15:57, 07-08-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Dim4eg10:
Пример .xml файла: »
Пример файла прилагайте в архиве.

P.S. Какой смысл дублировать тему: PowerShell - Скрипт разбора отчетов MBSA?

Отправлено: 16:33, 07-08-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброе утро! Файл добавил. Про дублирование темы - mbsa мало кто с ним работал (вообще ни одного ответа), а xml - вот вы уже написали

Отправлено: 09:27, 08-08-2017 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
PS > $xml.SecScan.Check | ? ID -eq 106 | % Detail | Format-List


text : Accounts with a green check have passwords that do not expire but were specified in NoExpireOk.txt
Head : Head
Row  : {Row, Row, Row, Row...}



PS > $xml.SecScan.Check | ? ID -eq 106 | % Detail | % Head

Col
---
User


PS > $xml.SecScan.Check | ? ID -eq 106 | % Detail | % Row

Grade Col
----- ---
3     AdmOraMon
3     Barsov-AS
3     CCB
3     Guest
3     Ivanov-AS
3     testDLP
3     OPER1
3     OPER2
3     AlterAgentSrv
3     AlterAgentSrvTest
3     SB
3     SBEA
3     SBEU
3     SYSOPMCI
3     SrvtAgentOnline
3     SysOp
3     admback
3     admbackag
3     altst
3     bellcow
3     bellfish
3     ckfr
3     kav
3     kAdmin
3     kControl
3     kInter
3     kMonitor
3     kOper
3     kTrans
3     kTransport
3     qurto
3     scom
3     scom_sql
3     useruit
5     SUPPORT_388945a0


PS > $xml.SecScan.Check | ? ID -eq 106 | % Detail | % {$_.Row.Col}
AdmOraMon
Barsov-AS
CCB
Guest
Ivanov-AS
testDLP
OPER1
OPER2
AlterAgentSrv
AlterAgentSrvTest
SB
SBEA
SBEU
SYSOPMCI
SrvtAgentOnline
SysOp
admback
admbackag
altst
bellcow
bellfish
ckfr
kav
kAdmin
kControl
kInter
kMonitor
kOper
kTrans
kTransport
qurto
scom
scom_sql
useruit
SUPPORT_388945a0
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:49, 08-08-2017 | #4


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Больше спасибо! Но мне очень важно разобраться как что работает и в своих ошибках:

почему я не могу добраться до сведений во вкладке detail командами типа

[XML]$c=get-content c:\ps\1\convert.xml
$p=$c.SecScan.check | select detail

или $p=$c.SecScan.check.detail

p.s. в Вашем скрипте есть много вещей, которые я вижу в первый раз (конвеерные передачи %). Это относится чисто с разделу работы с xml или общие принципы работы с PS? (p.p.s какой раздел мануалов, книг почитать?)

Отправлено: 10:05, 08-08-2017 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
PS > $p = $xml.SecScan.check | select detail
PS > $p

detail
------



Detail
Detail





Detail
Detail









PS > $p.detail

Head Row
---- ---
Head Row
Head {Row, Row, Row, Row...}
Head {Row, Row, Row, Row...}
Head {Row, Row, Row}

PS > $p.detail.Head[0].Col
Drive Letter
File System
PS > $p.detail.Row[0].Col
C:
NTFS
PS > $p.detail.Row[0]

Grade Col
----- ---
5     {C:, NTFS}
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:20, 08-08-2017 | #6


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Kazun:
$p = $xml.SecScan.check | select detail »
а переменная $xml? в нее мы get-content считываем содержимое файла?
[XML]$xml=get-content c:\test.xml

P.s. может я делаю что-то неправильно, но результата у меня нет ((

[XML]$xml=get-content c:\test.xml
$p = $xml.SecScan.check | select detail

После ввода
$p.detail

ничего нет на выходе

Последний раз редактировалось Dim4eg10, 08-08-2017 в 11:06.


Отправлено: 10:41, 08-08-2017 | #7


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Dim4eg10:
Это относится чисто с разделу работы с xml или общие принципы работы с PS? (p.p.s какой раздел мануалов, книг почитать?) »
Eсли задачи преобразования xml возникают регулярно - есть смысл взяться за xslt. Для получения данных из xml предназначен xpath.

Бегать циклами по объектному представлению xml катит только как частное решение на скорую руку.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:56, 08-08-2017 | #8


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Kazun:
$xml.SecScan.Check | ? ID -eq 106 | % Detail | Format-List »
Выдает ошибку:

PS C:\ps\1> [XML]$xml=get-content c:\test.xml
$xml.SecScan.Check | ? ID -eq 106 | % Detail | Format-List

Where-Object : Не удается привязать параметр "FilterScript". Не удается преобразовать значение "ID" типа "System.String" в
тип "System.Management.Automation.ScriptBlock".
строка:2 знак:23
+ $xml.SecScan.Check | ? <<<< ID -eq 106 | % Detail | Format-List
+ CategoryInfo : InvalidArgument: ( [Where-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand

Отправлено: 10:58, 08-08-2017 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


PowerShell V2 - признан устаревшим и больше не поддерживается. Данный функционал доступен с версии 3+.

Для V2:
Код: Выделить весь код
$xml.SecScan.Check | ? {$_.ID -eq "106"} | % {$_.Detail} | Format-List
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:04, 08-08-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Выборка данных из XML

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Выборка данных из EventLog'a Elven Скриптовые языки администрирования Windows 4 01-12-2016 14:48
Разное - Выборка данных из двух таблиц vision-d Программирование и базы данных 2 21-05-2014 19:17
Любой язык - Выборка данных из txt KarpovStas Скриптовые языки администрирования Windows 22 27-11-2013 17:16
CMD/BAT - выборка данных из лога MrVest Скриптовые языки администрирования Windows 0 20-11-2012 16:50
выборка данных из нескольких страниц vunder Программирование и базы данных 2 12-07-2004 20:33




 
Переход