我遇到了脚本覆盖自身而不保留值的问题。导出到 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'
}