how-to-log-off-windows-users-remotely-with-powershell

Hoe log je Windows gebruikers op afstand uit met PowerShell

Hoe log je Windows gebruikers op afstand uit met PowerShell

 

Hier is een snelle en eenvoudige manier om eindgebruikers die nog steeds zijn aangemeld op hun computer op afstand af te melden. Dit is vooral handig wanneer je onderhoud probeert te doen.

Eindgebruikers zijn soms veel te lang ingelogd op hun computer. Het lijkt erop dat elke keer dat je wat onderhoud aan de computer wilt uitvoeren waarvoor een gebruiker moet uitloggen, ze het niet lijken te doen of dat de computer stationair draait met hen als ingelogd! Gelukkig kunnen we dit in eigen hand nemen door een afstandsbediening van een andere computer te forceren.

Met PowerShell kunnen we een script maken dat contact opneemt met een of meer externe Windows-computers, controleren of iemand is aangemeld en, zo ja, deze uitloggen. We kunnen zelfs alle gebruikers afmelden als we dat willen.

Voordat we echter gekke dingen gaan doen, moeten we eerst uitzoeken hoe we kunnen vinden welke gebruikers zijn aangemeld bij een externe computer.

Controleren wie er is ingelogd

Er zijn een paar manieren om dat te doen, maar ik heb ervoor gekozen om het quser-commando te gebruiken. Dit is een niet-PowerShell-command, maar we kunnen deze nog steeds net zo gemakkelijk gebruiken vanuit PowerShell.

U kunt met deze opdracht spelen door deze lokaal op uw Windows-computer uit te voeren om een idee te krijgen van de uitvoer.

PS> quser
USERNAME SESSION NAME ID STATUS INACTIVE TIME LOGON TIME
>administrator console 1 Active none 22-9-2018 11:04

We zullen echter PowerShell gebruiken om deze stringuitvoer te parseren, zodat u zich er in de eerste plaats geen zorgen over hoeft te maken!

De quser-command kan ook externe computers opvragen met behulp van de /server-switch, maar ik heb ervoor gekozen om deze methode niet te gebruiken omdat we nu het voordeel hebben van het gebruik van PowerShell Remoting. In plaats daarvan kunnen we quser zelf uitvoeren op de externe computer.

PS> Invoke-Command -ComputerName 'REMOTECOMPUTER' -ScriptBlock { quser }
USERNAME SESSION NAME ID STATUS INACTIVE TIME LOGON TIME
abertram rdp-tcp #7 2 Actief 7 26-9-2018 16:57
 

Op afstand uitloggen in PowerShell

Nu je weet hoe jede ingelogde gebruikers kunt vinden, moeten we nu uitzoeken hoe je een gebruiker kunt afmelden. Ik heb ervoor gekozen om de logoff command te gebruiken. De logoff command is een andere niet-PowerShell-command, maar is eenvoudig genoeg om vanuit een script aan te roepen.

In het bovenstaande voorbeeld wordt 'abertram' in sessie 2 aangemeld bij de externe computer. Met behulp van de afmeldingsopdracht hoeven we alleen maar de sessie-ID als argument aan de opdracht door te geven en het zal de gebruiker plichtsgetrouw afmelden zoals verwacht.

PS> Invoke-Command -ComputerNaam 'REMOTECOMPUTER' -ScriptBlock { logoff 2 }

Ik kan quser weer draaien op de externe computer en we kunnen nu zien dat het is afgemeld.

PS> Invoke-Command -ComputerNaam 'REMOTECOMPUTER' -ScriptBlock {quser}
Er bestaat geen gebruiker voor *
+ CategoryInfo : Niet gespecificeerd: (Er bestaat geen gebruiker voor *:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerNaam : REMOTECOMPUTER

Een specifieke gebruiker op afstand uitloggen

We moeten nu deze twee opdrachten of commands samenvoegen om ons in staat te stellen een gebruikersnaam op te geven in plaats van een sessie-ID om ons af te melden bij een gebruikersaccount. Om dat te doen, moeten we quser uitvoeren, de export filteren op gebruikersnaam en vervolgens de sessie-ID van die uitvoer parseren en deze naar de log off command sturen.

$scriptBlock = {
$ErrorActionPreference = 'Stop'

try {
## Find all sessions matching the specified username
 $sessions = quser | Where-Object {$_ -match 'abertram'}
## Parse the session IDs from the output
$sessionIds = ($sessions -split ' +')[2]
Write-Host "Found $(@($sessionIds). Tel) suer log in(s) on computer."

## Loop through each session ID and pass each to the logoff command

 

$sessionIds | ForEach-object {
Write-Host "Logging off session id [$($_)]..."
logg off $_
}
} catch {
if ($_. Exception.Message -match 'No user exists') {
Write-Host "The user is not logged in."
} else {
throw $_. Exception.Message
}
}
}

## Run the scriptblock's code on the remote computer
PS> Invoke-Command -ComputerName REMOTECOMPUTER -ScriptBlock $scriptBlock


Found 1 user log in(s) on computer.
Logging off session-id [rdp-tcp#10]...

 

U kunt hierboven zien wanneer Invoke-Command wordt uitgevoerd met het gemaakte scriptblok, het zal de ingelogde gebruiker detecteren en onmiddellijk uitloggen.

 

Best cool! Stop hier niet; lees ons eBook, "How to Automate Using PowerShell," voor andere hacks met Powershell.

 

 


Comments
Comments are disabled in preview mode.