powershell命令查询域用户所登录的计算机

1.在C:\Program Files\WindowsPowerShell\Modules\Get-UserLogon,新建Get-UserLogon文件夹,并新建Get-UserLogon.psm1文件内容如下

function Get-UserLogon {
 
[CmdletBinding()]
 
param
 
(
 
[Parameter ()]
[String]$Computer,
 
[Parameter ()]
[String]$OU,
 
[Parameter ()]
[Switch]$All
 
)
 
$ErrorActionPreference="SilentlyContinue"
 
$result=@()
 
If ($Computer) {
 
Invoke-Command -ComputerName $Computer -ScriptBlock {quser} | Select-Object -Skip 1 | Foreach-Object {
 
$b=$_.trim() -replace '\s+',' ' -replace '>','' -split '\s'
 
If ($b[2] -like 'Disc*') {
 
$array= ([ordered]@{
'User' = $b[0]
'Computer' = $Computer
'Date' = $b[4]
'Time' = $b[5..6] -join ' '
})
 
$result+=New-Object -TypeName PSCustomObject -Property $array
 
}
 
else {
 
$array= ([ordered]@{
'User' = $b[0]
'Computer' = $Computer
'Date' = $b[5]
'Time' = $b[6..7] -join ' '
})
 
$result+=New-Object -TypeName PSCustomObject -Property $array
 
}
}
}
 
If ($OU) {
 
$comp=Get-ADComputer -Filter * -SearchBase "$OU" -Properties operatingsystem
 
$count=$comp.count
 
If ($count -gt 20) {
 
Write-Warning "Search $count computers. This may take some time ... About 4 seconds for each computer"
 
}
 
foreach ($u in $comp) {
 
Invoke-Command -ComputerName $u.Name -ScriptBlock {quser} | Select-Object -Skip 1 | ForEach-Object {
 
$a=$_.trim() -replace '\s+',' ' -replace '>','' -split '\s'
 
If ($a[2] -like '*Disc*') {
 
$array= ([ordered]@{
'User' = $a[0]
'Computer' = $u.Name
'Date' = $a[4]
'Time' = $a[5..6] -join ' '
})
 
$result+=New-Object -TypeName PSCustomObject -Property $array
}
 
else {
 
$array= ([ordered]@{
'User' = $a[0]
'Computer' = $u.Name
'Date' = $a[5]
'Time' = $a[6..7] -join ' '
})
 
$result+=New-Object -TypeName PSCustomObject -Property $array
}
 
}
 
}}If($All){
 
$comp=Get-ADComputer-Filter*-Properties operatingsystem
 
$count=$comp.count
 
If($count -gt 20){Write-Warning"Search $count computers. This may take some time ... About 4 seconds for each computer ..."}foreach($u in $comp){Invoke-Command-ComputerName $u.Name-ScriptBlock{quser}|Select-Object-Skip1|ForEach-Object{
 
$a=$_.trim()-replace '\s+',' '-replace '>',''-split '\s'If($a[2]-like '*Disc*'){
 
$array=([ordered]@{'User'= $a[0]'Computer'= $u.Name'Date'= $a[4]'Time'= $a[5..6]-join ' '})
 
$result+=New-Object-TypeNamePSCustomObject-Property $array
 
}else{
 
$array=([ordered]@{'User'= $a[0]'Computer'= $u.Name'Date'= $a[5]'Time'= $a[6..7]-join ' '})
 
$result+=New-Object-TypeNamePSCustomObject-Property $array
 
}}}}Write-Output $result
}脚本中含有三个参数分别是-computer –all –ou。
-computer参数中是获取特定电脑的登陆用户,-ou是搜索此OU运行中所有计算机的所有登录用户,最后一个参数-all提供包含前两个所有的信息。

Get-userlogon -ou 'OU=test,DC=test,DC=cn'|export-csv E:\computer.csv –NoTypeInformation -encoding "utf8"


 

posted @ 2020-08-18 11:38  会飞的老虎  阅读(1160)  评论(0编辑  收藏  举报