Aktuell angemeldete User und Rechnernamen im Netzwerk ermitteln
Hallo zusammen,
sicher ist diese Frage schon x-mal gestellt worden, aber bisher habe ich noch nicht das gefunden, was ich mir vorstelle.
Ich suche ein Tool (wie immer Freeware) welches mir zum aktuellen Zeitpunkt ermittelt,
welcher User an welchen PC in einem Netzwerk angemeldet ist.
Gerne kann das Tool auch weitere Informationen zum Client (so zum Inventarisiern) aubrufen.
Ich stelle mir es so vor, das ich einen IP-Bereich vorgebe, hier mir die Rechner ermittelt die es gibt und
wo ich zu einem Punkt X die Abfrage starten kann.
Nach einem Lauf kann ich ersehen, welcher User aktuell an der Maschine angemeldet ist.
Danke schonmal im voraus.
sicher ist diese Frage schon x-mal gestellt worden, aber bisher habe ich noch nicht das gefunden, was ich mir vorstelle.
Ich suche ein Tool (wie immer Freeware) welches mir zum aktuellen Zeitpunkt ermittelt,
welcher User an welchen PC in einem Netzwerk angemeldet ist.
Gerne kann das Tool auch weitere Informationen zum Client (so zum Inventarisiern) aubrufen.
Ich stelle mir es so vor, das ich einen IP-Bereich vorgebe, hier mir die Rechner ermittelt die es gibt und
wo ich zu einem Punkt X die Abfrage starten kann.
Nach einem Lauf kann ich ersehen, welcher User aktuell an der Maschine angemeldet ist.
Danke schonmal im voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 279869
Url: https://administrator.de/contentid/279869
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
17 Kommentare
Neuester Kommentar
Sers,
Alternativ: Sysinternals: PsLoggedOn
Das ganze lässt sich über eine CSV Datei mit den Computernamen und einer ForEach Schleife auch auf komplette Bereiche anwenden.
Grüße,
Philip
WMIC /NODE: xxx.xxx.xxx.xxx COMPUTERSYSTEM GET USERNAME
Alternativ: Sysinternals: PsLoggedOn
Das ganze lässt sich über eine CSV Datei mit den Computernamen und einer ForEach Schleife auch auf komplette Bereiche anwenden.
Grüße,
Philip
Moin,
mit Powershell lässt sich das etwa so machen:
Gruß grexit
mit Powershell lässt sich das etwa so machen:
cls
function Send-Ping([string]$device,[int]$delay){
$ping = New-Object System.Net.NetworkInformation.Ping
try{
if($ping.Send($device,$delay).Status -ne "Success"){
return $false
}else{
return $true
}
}catch{return $false}
}
$rngStart = Read-Host "Geben sie die Start-IP ein (bsp. 192.168.1.10)"
$rngEnd = Read-Host "Geben sie die End-IP ein (bsp. 192.168.1.50)"
$mS = [regex]::Match($rngStart,'^(\d+\.\d+\.\d+\.)(\d+)')
$mE = [regex]::Match($rngEnd,'^(\d+\.\d+\.\d+\.)(\d+)')
$subnet = $mS.Groups[1]
$start = [int]$mS.Groups[2].Value
$end = [int]$mE.Groups[2].Value
write-host 'Ermittle den Online-Status der Rechner ...' -ForegroundColor Green
$computer_status = @()
$computers = $start..$end | %{
$computer = "$subnet$_"
Write-Progress -Activity "Status der Rechner ermitteln" -Status "Aktuelle IP: $computer" -PercentComplete ((($_ - $start)/($end - $start))*100)
if (Send-ping $computer 200){
$user = ""
try{
$user = gwmi Win32_ComputerSystem -ComputerName $computer -EA Stop | select -Expand Username
if (!$user){
$user= '(Fehler bei der Abfrage)'
}
}catch{
$user = '(Fehler bei der Abfrage)'
}
$computer_status += New-Object PSObject -Property @{Computer=$computer;Status='Online';Angemeldet=$user}
}else{
$computer_status += New-Object PSObject -Property @{Computer=$computer;Status='Offline'}
}
}
write-host "`n$('='*30)`nStatusübersicht:`n$('='*30)" -ForegroundColor Green
$computer_status | select Computer,Status,Angemeldet | ogv
Zitat von @KgFmB:
Zusatz: versuche ich es in der Powershell zu starten, kommt
"Es wurde versucht, durch 0 <null> zu teilen.
Bei Zeile:3 Zeichen:127 ...."
Der dümmste fehler den die Leute hier machen, sie kopieren die Zahlen der Zeilen mit ;-PZusatz: versuche ich es in der Powershell zu starten, kommt
"Es wurde versucht, durch 0 <null> zu teilen.
Bei Zeile:3 Zeichen:127 ...."
Bitte über "Quelltext" oben rechts über dem Code kopieren!!!
Zitat von @KgFmB:
Aber, hab es mehr oder weniger nun zum Laufen gebracht....
a) ... den Funktionsnamen "Send-Ping" durch "SendPing" ersetzt... -> irgendwie mag er den Bindestrich
nicht...
Quatsch mit Soße !!Aber, hab es mehr oder weniger nun zum Laufen gebracht....
a) ... den Funktionsnamen "Send-Ping" durch "SendPing" ersetzt... -> irgendwie mag er den Bindestrich
nicht...
b) ... Da wo die Eingabe (vermute ich) der Start und Ende IP eingeben werden soll, durch die IPs ersetzt
Ebenfalls vollkommener Quatsch, das ganze kommt in eine PS1-Datei.Der Range wird dann abgefragt !
Du solltest dir erst mal die Grundlagen der Powershell reinpfeifen bevor du hier sowas vom Acker lässt. Ich mache Powershell nicht erst gestern...
Das Skript arbeitet einwandfrei , wenn man es richtig macht.
Das Skript muss nur in eine PS1-Datei kopiert werden, dann starten, und dann kommen zwei Benutzerabfragen für den IP-Range, dann erfolgt automatisch die Auswertung der Rechner. Ganz einfach, es muss nichts angepasst werden.
Die Powershell sollte natürlich auf 3.0 upgedated werden, da diese viele Fehler der Version 2.0 bereinigt.
Die Powershell sollte natürlich auf 3.0 upgedated werden, da diese viele Fehler der Version 2.0 bereinigt.
Bitte gelöst nicht vergessen. Danke.
Grüße!
Ich muss das Tehma mal wider hoch holen .
Dein Skript Funktioniert super !
Für ein aktuelles Projekt benötigt ich die Aufgabe in ein Txt Datei .
Mit Set-Content &Add-Content hab ich soweit eine Ausgabe hinbekommen aber nur in einer Zeile und nicht alle Rechner/User .
Hast du ein Tipp für ein Powershell Neuling ?
Ich muss das Tehma mal wider hoch holen .
Dein Skript Funktioniert super !
Für ein aktuelles Projekt benötigt ich die Aufgabe in ein Txt Datei .
Mit Set-Content &Add-Content hab ich soweit eine Ausgabe hinbekommen aber nur in einer Zeile und nicht alle Rechner/User .
Hast du ein Tipp für ein Powershell Neuling ?
Ich nehm das nochmal hoch, da ich genau solch ein Script sucher, was innerhalb der Domain die aktuellen angemeldeten User & PC Namen auslist.
Habs als .ps1 gespeichert und wenn ich das per PowerShell ausführe popt kurz ein Shell Fenster auf und schließt dann wieder....da passiert nichts.
Kann mir hier jemand einen Rat geben?
Vielen Dank!
Habs als .ps1 gespeichert und wenn ich das per PowerShell ausführe popt kurz ein Shell Fenster auf und schließt dann wieder....da passiert nichts.
Kann mir hier jemand einen Rat geben?
Vielen Dank!
Hi,
ich hatte da mal was gebastelt, ist schon was her und habe es lange nicht benutzt:
Am besten in die ISE einfügen und dann ausführen
ich hatte da mal was gebastelt, ist schon was her und habe es lange nicht benutzt:
$hosts = Get-ADComputer -Filter {enabled -eq "true"} | Sort-Object -Property Name | Select-Object -ExpandProperty Name
foreach ($h in $hosts) { $tasks[$h] = [System.Net.NetworkInformation.Ping]::new().SendPingAsync($h) }
[Threading.Tasks.Task]::WaitAll()
$pingresult = foreach ($h in $hosts) {
$res = $tasks[$h].Result
[PSCustomObject]@{
Online = $res.Status -eq "Success"
Address = $h
}
}
$result = @()
$totalCount = ($pingresult | Measure-Object).Count
$onlineCount = ($pingresult | Where-Object online -eq $true | Measure-Object).Count
$processedCount = 0
$pingresult | ForEach-Object {
if ($_.Online) {
$script:sName = $_.address
$completed = [math]::Round($processedCount / $onlineCount * 100)
Write-Progress -Activity "Suche eingeloggte Benutzer" -Status "$onlineCount von $totalCount Computer online. Prüfe $script:sName ($processedCount/$onlineCount)" -PercentComplete $completed
try {
$quserresult = quser "/server:$($_.address)"2>&1
$quserresult | Select-Object -Skip 1 | ForEach-Object {
$a = $_.trim() -replace '\s+', ' ' -replace '>', '' -split '\s'
If ($a[2] -like '*Getr*') {
$array = ([ordered]@{
'User' = $a[0]
'Computer' = $script:sName
'Date' = $a[4]
'Time' = $a[5..6] -join ' '
})
$result += New-Object -TypeName PSCustomObject -Property $array
}
else {
$array = ([ordered]@{
'User' = $a[0]
'Computer' = $script:sName
'Date' = $a[5]
'Time' = $a[6..7] -join ' '
})
$result += New-Object -TypeName PSCustomObject -Property $array
}
}
}
catch {
write-host $Error[0]
}
$processedCount++
}
}
Write-Progress -Activity "Suche eingeloggte Benutzer" -Status "Fertig" -Completed
Write-Output $result
Hallo und vielen Dank!
Habe das mal ausgeführt. Darauf schreibt er:
Habe das mal ausgeführt. Darauf schreibt er:
Get-ADComputer : Die Benennung "Get-ADComputer" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt.
Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:10
+ $hosts = Get-ADComputer -Filter {enabled -eq "true"} | Sort-Object - ...
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-ADComputer:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Zitat von @ElektroMYK:
Hallo und vielen Dank!
Habe das mal ausgeführt. Darauf schreibt er:
Hallo und vielen Dank!
Habe das mal ausgeführt. Darauf schreibt er:
Get-ADComputer : Die Benennung "Get-ADComputer" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt.
Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:10
+ $hosts = Get-ADComputer -Filter {enabled -eq "true"} | Sort-Object - ...
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-ADComputer:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Dann fehlt dir auf dem Computer das RSAT AD Paket
https://www.tech-faq.net/rsat-in-windows-10-installieren/
Alternativ ersetze Zeile 1 durch
$hosts = ([adsisearcher]"(&(objectClass=computer)(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=2))").FindAll() | ForEach-Object {$_.Properties["DNSHostName"]}