csv 导出不断自我覆盖

csv 导出不断自我覆盖

我遇到了脚本覆盖自身而不保留值的问题。导出到 CSV 的唯一内容是最后一台服务器上的活跃用户列表,而不是所有用户和服务器的列表。

谢谢你!

此脚本的作用:过滤掉活跃时间超过 60 分钟或已断开连接的用户。对于断开连接的脚本,我使用了来自 MS 贡献者的简单开源脚本,这里。我已将包含所有功能的完整代码添加到我的 github gist: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

我认为您想要的是附加到当前文件,目前它每次都会覆盖该文件。

要附加:Export-Csv 'H:\demo\session\run11.csv' -NoTypeInformation -Force -append

如果您需要每次脚本运行时数据都是唯一的,则可以清除文件内容(如果存在)。因此,在脚本的开头,请执行以下操作:

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

相关内容