PowerShell: Andres Kahk, Kasutaja-Sessioon.ps1: Difference between revisions
From ICO wiki
Jump to navigationJump to search
Created page with '<source lang="powershell"> <# .SYNOPSIS Kasutaja-Sessioon.ps1 Annab kasutaja loetelu, valitud serverites .DESCRIPTION Otsib ette antud serveritest kõik kasutajad või etteant…' |
No edit summary |
||
Line 18: | Line 18: | ||
Author : Andres Kahk - akahk@itcollege.ee | Author : Andres Kahk - akahk@itcollege.ee | ||
Requires : PowerShell V2 | Requires : PowerShell V2 | ||
Version : 0. | Version : 0.4 | ||
.EXAMPLE | .EXAMPLE | ||
Psh> .\Kasutaja-Sessioon.ps1 -Username kasutaja -ServerList server1,server2 | 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 -ServerList server1,server2 -AinultOtsi | ||
Psh> .\Kasutaja-Sessioon.ps1 -Username kasutaja -ServerFile C:\serverlist.txt | |||
#> | #> | ||
# Deklareerime parameetrid | # Deklareerime parameetrid | ||
param( | param( | ||
[string][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$UserName, | [string][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$UserName, | ||
[switch]$AinultOtsi, | [switch]$AinultOtsi, | ||
[string[]][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$ServerList=$ENV:COMPUTERNAME | [string[]][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$ServerList=$ENV:COMPUTERNAME, | ||
[string[]][parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]$ServerFile | |||
) | ) | ||
# Puhastame akna muudetst teadetest | # Puhastame akna muudetst teadetest | ||
cls | 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. | # Algväärtustame mõned muutujad. | ||
$Result = @() | $Result = @() | ||
Line 40: | Line 52: | ||
$Users = @() | $Users = @() | ||
$Session = @() | $Session = @() | ||
# Loeme ServerListist ette antud parameetreid ning kogume kokku vajaliku kasutaja info edasiseks toimetuseks | # Loeme ServerListist ette antud parameetreid ning kogume kokku vajaliku kasutaja info edasiseks toimetuseks | ||
foreach ($Server in $ | foreach ($Server in $Servers) | ||
{ | { | ||
Write-Host "Loen kasutajaid serverist $server..." -foregroundcolor red -BackgroundColor yellow | Write-Host "Loen kasutajaid serverist $server..." -foregroundcolor red -BackgroundColor yellow | ||
Line 65: | Line 77: | ||
} | } | ||
} | } | ||
cls | 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. | #Ü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 $Errors -foregroundcolor red -BackgroundColor yellow | ||
Line 82: | Line 94: | ||
"Kokku " + $Result.Count + " sessiooni" | "Kokku " + $Result.Count + " sessiooni" | ||
} | } | ||
$Users = @($Result | where{$_.UserName -match $UserName}) | $Users = @($Result | where{$_.UserName -match $UserName}) | ||
if ($Users -eq $null) | if ($Users -eq $null) | ||
Line 94: | Line 106: | ||
cls | cls | ||
$Users | Sort-Object UserName | Format-Table -AutoSize | $Users | Sort-Object UserName | Format-Table -AutoSize | ||
if ($AinultOtsi) | if ($AinultOtsi) | ||
{ | { | ||
exit | exit | ||
} | } | ||
#Küsime kasutaja infot kellega sessiooni manipulatsioone edasi teha | #Küsime kasutaja infot kellega sessiooni manipulatsioone edasi teha | ||
Write-Host $Errors -foregroundcolor red -BackgroundColor yellow | Write-Host $Errors -foregroundcolor red -BackgroundColor yellow | ||
Line 110: | Line 122: | ||
exit | exit | ||
} | } | ||
cls | cls | ||
$Session | Format-Table | $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 | 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" | $Task = Read-Host "Valik" | ||
if ($Task -like "l"){$Param = "/server:`"" + $Session.Computer + "`"";logoff $Session.SessionId $Param /v} | if ($Task -like "l"){$Param = "/server:`"" + $Session.Computer + "`"";logoff $Session.SessionId $Param /v} |
Latest revision as of 16:42, 30 January 2012
<#
.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"}
}