我正在编写一个脚本,根据是否有用户登录来过滤服务器。如果没有用户登录,则脚本会将服务器的名称导出到文本文件。如果有用户登录,则脚本将通过用户并删除那些断开连接或空闲时间超过60分钟的用户。
我已经完成了第一个过滤器,但我无法过滤空闲时间并找出哪些用户有超过60分钟的空闲时间,我能够过滤那些已经登录超过一天的人,但是我不要以为这会有所帮助。
我在下面列出了相关代码: 谢谢。
$Servers = Get-Content 'H:\main\computernames.txt'
$openservers =@()
foreach ($Server in $Servers)
{
if (-not( Test-Connection $Server -Count 1 -Quiet )) { continue }
if (-not( Convert-QueryToObjects $Server -ErrorAction SilentlyContinue))
{
$openservers += $server
$openservers | Out-File 'H:\main\server\openservers.txt'
}
else
{
Convert-QueryToObjects -Name $Server | Where-Object {@('Active','Disconnected') -contains $_.SessionState} | select @{Name='Server Name';Expression={$_.ComputerName}},
@{Name='Username'; Expression={$_.Username}}, @{Name='Session State'; Expression={$_.SessionState}}, @{Name='Idle Time'; Expression={$_.IdleTime}}, @{Name='ID'; Expression={$_.ID}}
if((Convert-QueryToObjects -Name $Server|?{@('Disconnected') -contains $_.SessionState}) -or (Convert-QueryToObjects -Name $Server|Where-Object {[datetime]$_.LogonTime -le (Get-Date).AddDays(-1)}))
{
H:\WindowsPowerShell\Get-LoggedOnUser.ps1 -ComputerName $Server | Disconnect-LoggedOnUser -Verbose
Write-Output "--------------------------------"
}
}
}