Powershell 自定义输出列,两个例子
昨天和今天因為工作需要寫了兩個很簡單的腳本,都需要自定義輸出的列,需要用到 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,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Powershell 自定义输出列,两个例子的全部內容,希望文章能夠幫你解決所遇到的問題。