PowerShell: Andres Kahk, Kasutaja-Sessioon.ps1: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Akahk (talk | contribs)
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…'
 
Akahk (talk | contribs)
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.3
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 $ServerList)
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"}
}