У меня проблемы с перезаписью самого скрипта и не удерживанием значений. Единственное, что экспортируется в 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 
    }

   }

   } 

1 ответ1

0

Я думаю, что вы хотите, чтобы добавить текущий файл, в настоящее время он перезаписывает файл каждый раз.

Для добавления: Export-Csv 'H:\demo\session\run11.csv' -NoTypeInformation -Force -append

Если вам необходимо, чтобы данные были уникальными при каждом запуске сценария, вы можете очистить содержимое файла, если оно существует. Так что в начале вашего сценария что-то вроде.

if (Test-Path 'C:\users\map.txt')
{
    Clear-Content 'C:\users\map.txt'
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .