Powershell Active Directory日志记录和导入,便于回滚

时间:2014-10-27 20:22:52

标签: powershell logging rollback

我从头到尾编写自定义脚本来搜索用户,因此我可以禁用和移动它们。 (脚本完成并正常工作)

我现在要做的是创建一个易于阅读的日志,它也必须用作简单的回滚。

I.ex:

Get-Aduser -Identity test -properties SamAccountName,MemberOf,GivenName,Surname 

这将返回以下内容:

DistinguishedName : CN=test,OU=OUy,OU=Lab Accounts,DC=domain,DC=org
Enabled           : True
GivenName         : test
Name              : test
SamAccountName    : test
Surname           : test
Memberof          : {CN=OU,OU=Norway,OU=Lab Accounts,DC=Domain,DC=org, CN=Domain Admins,CN=Users,DC=Domain,DC=org} 

如果我使用:

$test2 = Get-ADUser -Identity test | 
Select-Object -Property SamAccountName,GivenName,Surname,Memberof

给了我:

SamAccountName GivenName Surname Memberof
-------------- --------- ------- --------
test           test      test      {}   

我现在的问题是如何将其记录到csv / text文件中,该文件可以轻松导回以进行回滚。

我目前正在使用clixml,它在哈希表中保留了使用哈希表完成的导出。

像:

$user=@{
            @{
             Username=$user.samaccountname
             Memberof=$user.memberOf
             }
       }

这允许我或多或少地使用点符号来访问存储的信息以便于回滚,但查看文件并不是那么容易阅读

当很多信息是某种项目集合时,您建议我使用哪种方法来记录我需要的信息?

我试过用PSobject探索,但我还没有掌握它。 是否有任何日志记录方法将输出到易于阅读的日志并易于用于回滚?

如果有人能够提供一个例子并指出我要进一步探索的页面,我会非常感激。

读者友好地想到这样的事情:

Username,Givenname,Surname,Memberof
Test,test2,test3,Admins;somegroup;somegroup

Username,Givenname,Surname,Memberof
Test,test2,test3,Admins somegroup somegroup

编辑1 以下是获取信息的代码:

Get-ADUser -Identity test -Properties SamAccountName,GivenName,Surname,Memberof | 
Select-Object -Property SamAccountName,GivenName,Surname,Memberof | export-csv C:\test.txt

这是输出文件中的内容:

#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
"SamAccountName","GivenName","Surname","Memberof"
"test","Mari","Hopkins","Microsoft.ActiveDirectory.Management.ADPropertyValueCollection"

2 个答案:

答案 0 :(得分:0)

取决于易于阅读的含义,但如何使用Export-Clixml存储对象和Import-Clixml来导入对象呢?

答案 1 :(得分:0)

您已经为CSV启用了此信息。为什么不使用Export-CSV和相反的Import-CSV

$test2 | Export-CSV -Path c:\temp\backup.csv -Append

追加会将项目添加到文件中,而不会覆盖当前内容。然后,如果需要,可以使用Import-CSV将其导回。可能有多个对象

$deprecatedAccounts = Import-CSV -Path c:\temp\backup.csv

要创建输出,您可以使用数组收集用户。

$users = @()
$users += $test2
$users | Export-CSV -Path c:\temp\backup.csv -Append

根据评论进行修改

抱歉,我一开始并不理解这个问题。您需要做的是将MemberOf从数组扩展为字符串。

Get-ADUser test -Properties SamAccountName,GivenName,Surname,Memberof | 
    Select-Object SamAccountName,GivenName,Surname,@{Label="MemberOf";Expression = {$_.Memberof -join ";"}} |
    Export-Csv -Path c:\temp\backup.csv -Append -NoTypeInformation

select-object中创建一个计算属性,将memberof扩展为以分号分隔的字符串。如果您不喜欢,-NoTypeInformation会移除#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser行。

如果您需要将其处理回数组,可以使用简单的split

进行处理
Import-CSV c:\temp\backup.csv | ForEach-Object{$_.MemberOf -split ";"}