PowerShell: Andres Kahk, Kasutaja-Sessioon.ps1
From ICO wiki
<#
.SYNOPSIS
Kasutaja-Sessioon.ps1
Annab kasutaja loetelu, valitud serverites
.DESCRIPTION
Otsib ette antud serveritest kõik kasutajad või etteantud kasutaja
ning lubab teostada valitud kasutajaga terminalsessiooni manipulatsiooni
(eeldusel et kasutaja on administraatori õigustega)
.PARAMETER UserName
Otsib nime või nimeosa järgi sobiva kasutaja
.PARAMETER AinultOtsi
Teostan ainult otsingu valitud kasutajaga, sessiooni tegevusi ei tehta
.PARAMETER ServerList
Serverite nimekiri kust kasutajat või kasutajaid otsida, vaikeväärtusena on skripti jooksutav arvuti.
.NOTES
File Name : Kasutaja-Sessioon.ps1
Author : Andres Kahk - akahk@itcollege.ee
Requires : PowerShell V2
Version : 0.4
.EXAMPLE
Psh> .\Kasutaja-Sessioon.ps1 -Username kasutaja -ServerList server1,server2
Psh> .\Kasutaja-Sessioon.ps1 -Username kasutaja -ServerList server1,server2 -AinultOtsi
Psh> .\Kasutaja-Sessioon.ps1 -Username kasutaja -ServerFile C:\serverlist.txt
#>
# Deklareerime parameetrid
param(
[string][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$UserName,
[switch]$AinultOtsi,
[string[]][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$ServerList=$ENV:COMPUTERNAME,
[string[]][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$ServerFile
)
# Puhastame akna muudetst teadetest
cls
#Kui antakse serverite list failina, siis ei kasuta parameetrit ServerList
if ($ServerFile)
{
$Servers = Get-Content $ServerFile
}
else
{
$Servers = $ServerList
}
# Algväärtustame mõned muutujad.
$Result = @()
$Errors = ""
$Users = @()
$Session = @()
# Loeme ServerListist ette antud parameetreid ning kogume kokku vajaliku kasutaja info edasiseks toimetuseks
foreach ($Server in $Servers)
{
Write-Host "Loen kasutajaid serverist $server..." -foregroundcolor red -BackgroundColor yellow
$Sessions = quser /server:$server
if ($Sessions -eq $null){$Errors += "Serveriga " + $Server + " ei saanud ühendust või seal polnud ühtegi kasutajat!`r`n"}
else
{
$i = 1
while ($i -le ($Sessions.count -1))
{
$TempResult = "" | Select Nr,Username,Computer,SessionId,State,IdleTime,LogonTime
$TempResult.Nr = $i
$TempResult.Username = $Sessions[$i].Substring(1,22).Trim()
$TempResult.Computer = $Server
$TempResult.SessionId = $Sessions[$i].Substring(42,4).Trim()
$TempResult.State = $Sessions[$i].Substring(46,12).Trim()
$TempResult.IdleTime = $Sessions[$i].Substring(58,7).Trim()
$TempResult.LogonTime = $Sessions[$i].Substring(65).Trim()
$Result += $TempResult
$i++
}
}
}
cls
#Ühenduse puudumise korral näitame viga, edasi küsime kasutaja nime, kui see pole antud, vajadusel filtreerime välja või näitame kõiki serveri kasutaja sessioone.
Write-Host $Errors -foregroundcolor red -BackgroundColor yellow
Write-Host "Sisestage otsitav kasutajanimi (tühjal väljal enterit vajutades kuvatakse kõik)" -foregroundcolor black -BackgroundColor green
if (!$UserName)
{
$UserName = read-host "Kasutajanimi"
}
elseif(!$UserName)
{
cls
$Users = @($Result)
$Users | where{$_.UserName -ne ""} | Sort-Object UserName | Format-Table -AutoSize
"Kokku " + $Result.Count + " sessiooni"
}
$Users = @($Result | where{$_.UserName -match $UserName})
if ($Users -eq $null)
{
cls
Write-Host "Kasutajanime, mis sisaldaks $UserName ei leitud!" -foregroundcolor red -BackgroundColor yellow
exit
}
else
{
cls
$Users | Sort-Object UserName | Format-Table -AutoSize
if ($AinultOtsi)
{
exit
}
#Küsime kasutaja infot kellega sessiooni manipulatsioone edasi teha
Write-Host $Errors -foregroundcolor red -BackgroundColor yellow
Write-Host "Sisestage kasutaja Nr kellega soovite toiminguid teostada!" -foregroundcolor black -BackgroundColor green
$SessionNr = Read-Host "Valik"
$Session = $Users[$SessionNr - 1]
if (!$Session)
{
Write-Host "Sellist kasutajat pole, katkestan" -foregroundcolor red -BackgroundColor yellow
exit
}
cls
$Session | Format-Table
write-host "Teha valitud kasutajale: Logoff (l), Disconnect (d), Sessiooni reset (r) või ära tee midagi (enter)" -foregroundcolor black -BackgroundColor green
$Task = Read-Host "Valik"
if ($Task -like "l"){$Param = "/server:`"" + $Session.Computer + "`"";logoff $Session.SessionId $Param /v}
elseif ($Task -like "d"){$Param = "/server:`"" + $Session.Computer + "`"";tsdiscon $Session.SessionId $Param /v}
elseif ($Task -like "r"){$Param = "/server:`"" + $Session.Computer + "`"";reset session $Session.SessionId $Param /v}
else {cls;"Tegevuse valik ei sobinud"}
}