Powershell 自定义输出列,两个例子

昨天和今天因为工作需要写了两个很简单的脚本,都需要自定义输出的列,需要用到 select @{name="名字”expression={表达式}}这种方式自定义。


第一个例子是boss让我输出一个简单的报表,需要列出悉尼除了系统账号以外的所有用户,包括他们的名字,手机,座机,所在的OU,公司等等信息。


这个基本的命令很简单,get-aduser就能实现,几个过滤的条件稍微思考了一下。


  1. 所有悉尼用户,可以用 -searchbase限制搜索的OU范围;

  2. 排除系统账号,因为所有的系统账号都位于同一个OU下面,那么搜索的时候过滤掉这个OU就行,例如

        get-aduser -filter * | where-object{$_.disginuishedname -notlike '*XXXX*‘}

  1. 各种需要查看的属性可以用-properties 列出

  2. 用户所在的OU本身不是一个属性,不过可以列出用户的caonicalname 属性,例如 /domain/ouname/username 的格式,然后通过split分隔符’/‘来处理

  3. 可以通过{name="xxx"';express={XXX}}的格式来自定义输出的表格header

  4. 最后导出到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查看一下结果

wKiom1WsaA7zks9WAAJwQ5FrkVo212.jpg


第二个例子是因为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

wKiom1WsZzPBjycnAAKCLJfEj5U870.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值