У меня проблемы с перезаписью самого скрипта и не удерживанием значений. Единственное, что экспортируется в CSV - это список активных пользователей на последнем сервере, а не все пользователи и серверы вместе.
Спасибо!
Что делает этот скрипт: он отфильтровывает пользователей, которые были активны более 60 минут или отключены. Для сценария отсоединения я использовал простой сценарий с открытым исходным кодом от автора MS, который можно найти здесь. Я добавил полный код со всеми функциями в мой список github: https://gist.github.com/ruslive109/a56837bb84187b522797b2abb19d6acf
$Servers = Get-Content 'H:\demo\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:\demo\session\openservers.txt'
}
else
{
Convert-QueryToObjects -Name $Server |Where-Object{ {@('Disconnected','Active') -contains $_.SessionState} | Select-Object {@{Name='Server Name';Expression={$_.ComputerName}},
@{Name='Username'; Expression={$_.Username}}, @{Name='Session State'; Expression={$_.SessionState}}, @{Name='Idle Time'; Expression={$_.IdleTime}},
@{Name='ID'; Expression={$_.ID}} }}| Export-Csv 'H:\demo\session\run11.csv' -NoTypeInformation -Force
Import-Csv 'H:\demo\session\run11.csv' | Where-Object { ($_.SessionState -eq 'Disconnected') -or (($_.IdleTime -like "*:*") -and ($_.IdleTime -gt "00:59"))} |
ForEach-Object {
Disconnect-LoggedOnUser -ComputerName $_.ComputerName -Id $_.ID -Verbose
}
}
}