本文共 1465 字,大约阅读时间需要 4 分钟。
昨天和今天因为工作需要写了两个很简单的脚本,都需要自定义输出的列,需要用到 select @{name="名字”expression={表达式}}这种方式自定义。
第一个例子是boss让我输出一个简单的报表,需要列出悉尼除了系统账号以外的所有用户,包括他们的名字,手机,座机,所在的OU,公司等等信息。
这个基本的命令很简单,get-aduser就能实现,几个过滤的条件稍微思考了一下。
所有悉尼用户,可以用 -searchbase限制搜索的OU范围;
排除系统账号,因为所有的系统账号都位于同一个OU下面,那么搜索的时候过滤掉这个OU就行,例如
get-aduser -filter * | where-object{$_.disginuishedname -notlike '*XXXX*‘}
各种需要查看的属性可以用-properties 列出
用户所在的OU本身不是一个属性,不过可以列出用户的caonicalname 属性,例如 /domain/ouname/username 的格式,然后通过split分隔符’/‘来处理
可以通过{name="xxx"';express={XXX}}的格式来自定义输出的表格header
最后导出到csv文件保存
get-aduser -Filter * -SearchBase "ou=sydney,dc=omnicom,dc=com,dc=au" -Properties name,mobile,title,ipphone, canonicalname,company,office |?{$_.distinguishedname -notlike '*Sydney Non-Replication*'}| select Name, Title, Mobile,@{name="Extension";expression={$_.ipphone}},@{name="OU";expression={$temp=($_.canonicalname -split '/');$temp[$temp.count-2]}}, company, office | sort name| Export-Csv c:\temp\users.csv
gridview查看一下结果
第二个例子是因为windows 2003服务器上周寿终正寝了,我需要导出AD里面windows2000和2003的记录,看看是否还在使用。实现方式和上面类似,filter过滤操作系统类型,然后select里面表达式自定义status,test-connection发送一个icmp包进行判断,根据结果返回值,同时输出dns cache的ip地址
Get-ADComputer -Filter{(operatingsystem -like "*2000*") -or (operatingsystem -like "*2003")} -Properties operatingsystem,ipv4address | sort operatingsystem| select name, operatingsystem, @{name="status";expression={if(Test-Connection -ComputerName $_.name -count 1 -quiet ){return "Connected"}else{return "Disconnected"}}}, ipv4address
转载地址:http://gmzaa.baihongyu.com/