Создание XML-файла из вывода команды PowerShell - PullRequest
3 голосов
/ 05 августа 2011

Я мало работал с XML, поэтому для большинства это может быть основным вопросом ...

Я хочу собирать информацию из Get-ChildItem в сочетании с Get-Acl и сохранять ее в XMLфайл, чтобы я мог использовать его позже в PowerShell.

Проблема: чтобы использовать Get-Acl, мне нужно использовать цикл foreach внутри конвейера, который, в свою очередь, меняет тип объекта на системный.String.Поэтому, когда я экспортирую это в XML, это в значительной степени простой файл, а не структура таблицы.

Как мне вернуть структуру таблицы?

Если я просто сделаю эту команду, я смогу получитьструктура таблицы:


Get-ChildItem . -Recurse | 
Select FullName, PSIsContainer, CreationTimeUTC, LastAccessTimeUtc, Length | 
Export-Clixml .\STIGTest\Baseline_1.xml

Когда я делаю эту команду, которая мне нужна, я получаю плоский файл:


Get-ChildItem . -Recurse | 
foreach-object {$AclOwner = (get-acl $_.pspath).owner; $_.Fullname, $_.PSIsContainer, $_.CreationTimeUtc, $_.LastAccessUtc, $_.Length, $AclOwner} | 
Export-Clixml .\STIGTest\Baseline_2.xml

Я видел, где можно преобразовать системный объектв строку, но не могу найти, где я могу сделать наоборот.Я предполагаю, что если они останутся системным объектом, файл XML сохранит структуру таблицы?

Ответы [ 2 ]

1 голос
/ 06 августа 2011

@ Ответ Джоша Эйнштейна и по ссылке, которую я дал в комментарии, другой ответ - путь. Но есть и другой способ, с помощью которого вы можете добавить информацию acl к самому объекту, и ниже описывается то, что вы пытались, как упоминалось в вопросе:

Get-ChildItem . -recurse | 
foreach-object {$AclOwner = (get-acl $_.pspath).owner; Add-Member -input $_ -MemberType noteproperty -Name AclOwner -Value $AclOwner; $_ } | 
Select FullName, PSIsContainer, CreationTimeUTC, LastAccessTimeUtc, Length, AclOwner |
Export-Clixml .\STIGTest\Baseline_1.xml
1 голос
/ 05 августа 2011

Дайте этому попробовать. Он использует тот факт, что Select-Object может создавать «вычисляемые» свойства, заданные выражением.

Get-ChildItem . -Recurse | 
Select FullName,
       PSIsContainer,
       CreationTimeUTC,
       LastAccessTimeUtc,
       Length,
       @{Name='Owner';Expression={ (Get-Acl $_.PSPath).Owner }} | 
Export-Clixml .\STIGTest\Baseline_1.xml

Я написал @{Name=...; Expression=...} для ясности, но их можно сократить до @{N=...,E=...}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...