昨天和今天因为工作需要写了两个很简单的脚本,都需要自定义输出的列,需要用到 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文件保存
1
|
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地址
1
2
3
|
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
|
本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1675600,如需转载请自行联系原作者