Powershell

Pitäisi saada listattua kaikki avoimet paikalliset käyttäjät siten, että jokaisesta kerrotaan käyttäjänimi, koko nimi, kaikki ryhmät joissa tunnus on ja lastlogon

Saan tällä hetkellä listattua nuo erikseen, mutta koska tunnuksia riittää melkoisesti pitäisi saada suoraan yhdistetty lista. Tuon ei kuvitteli olen osaavalle vaikea, mutta omat yritykset eivät ole vielä tuottaneet toimivaa versiota

ChatGPT on omiaan näitä varten.

Esimerkkinä vaikka tämä koodi jonka generoin chatgpt:llä

Koodi:
# Listaa kaikki paikalliset käyttäjät, jotka eivät ole poistettu käytöstä
$users = Get-LocalUser | Where-Object { -not $_.Disabled }

# Kerätään tiedot jokaisesta käyttäjästä
$result = foreach ($u in $users) {
    try {
        # Käyttäjän ryhmät
        $groups = (Get-LocalGroup | ForEach-Object {
            try {
                if (Get-LocalGroupMember -Group $_.Name -ErrorAction SilentlyContinue | Where-Object { $_.Name -eq $u.Name }) {
                    $_.Name
                }
            } catch {}
        }) -join ", "

        # Viimeinen kirjautuminen (jos saatavilla)
        $lastLogon = $u.LastLogon
        if (-not $lastLogon) { $lastLogon = "Ei tietoa" }

        # Tulostetaan yhteen objektiin
        [PSCustomObject]@{
            Käyttäjänimi = $u.Name
            KokoNimi     = $u.FullName
            Ryhmät       = $groups
            LastLogon    = $lastLogon
        }
    } catch {
        Write-Warning "Virhe käyttäjän $($u.Name) kohdalla: $_"
    }
}

# Näytetään tulos taulukkona
$result | Sort-Object Käyttäjänimi | Format-Table -AutoSize
 
ChatGPT on omiaan näitä varten.

Esimerkkinä vaikka tämä koodi jonka generoin chatgpt:llä

Koodi:
# Listaa kaikki paikalliset käyttäjät, jotka eivät ole poistettu käytöstä
$users = Get-LocalUser | Where-Object { -not $_.Disabled }

# Kerätään tiedot jokaisesta käyttäjästä
$result = foreach ($u in $users) {
    try {
        # Käyttäjän ryhmät
        $groups = (Get-LocalGroup | ForEach-Object {
            try {
                if (Get-LocalGroupMember -Group $_.Name -ErrorAction SilentlyContinue | Where-Object { $_.Name -eq $u.Name }) {
                    $_.Name
                }
            } catch {}
        }) -join ", "

        # Viimeinen kirjautuminen (jos saatavilla)
        $lastLogon = $u.LastLogon
        if (-not $lastLogon) { $lastLogon = "Ei tietoa" }

        # Tulostetaan yhteen objektiin
        [PSCustomObject]@{
            Käyttäjänimi = $u.Name
            KokoNimi     = $u.FullName
            Ryhmät       = $groups
            LastLogon    = $lastLogon
        }
    } catch {
        Write-Warning "Virhe käyttäjän $($u.Name) kohdalla: $_"
    }
}

# Näytetään tulos taulukkona
$result | Sort-Object Käyttäjänimi | Format-Table -AutoSize
Muuten hyvä, mutta ei listaa ryhmiä kun kokeilin ajaa sen. Lisäksi varsin hidas, mutta se on sivuseikka jos muuten toimii
 
Muuten hyvä, mutta ei listaa ryhmiä kun kokeilin ajaa sen. Lisäksi varsin hidas, mutta se on sivuseikka jos muuten toimii
Koodi:
# Listaa kaikki paikalliset käyttäjät, jotka eivät ole poistettu käytöstä
$users = Get-LocalUser | Where-Object { -not $_.Disabled }

# Haetaan kaikki ryhmät ja niiden jäsenet etukäteen
$groupMap = @{}
foreach ($group in Get-LocalGroup) {
    try {
        $members = Get-LocalGroupMember -Group $group.Name -ErrorAction SilentlyContinue
        $groupMap[$group.Name] = $members
    } catch {
        $groupMap[$group.Name] = @()
    }
}

# Kerätään tiedot jokaisesta käyttäjästä
$result = foreach ($u in $users) {
    try {
        # Käyttäjän ryhmät SID-tunnisteen perusteella
        $userSID = $u.SID
        $groupList = @()
        foreach ($entry in $groupMap.GetEnumerator()) {
            if ($entry.Value | Where-Object { $_.SID -eq $userSID }) {
                $groupList += $entry.Key
            }
        }
        $groups = $groupList -join ", "

        # Viimeinen kirjautuminen (jos saatavilla)
        $lastLogon = $u.LastLogon
        if (-not $lastLogon) { $lastLogon = "Ei tietoa" }

        # Tulostetaan yhteen objektiin
        [PSCustomObject]@{
            Käyttäjänimi = $u.Name
            KokoNimi     = $u.FullName
            Ryhmät       = $groups
            LastLogon    = $lastLogon
        }
    } catch {
        Write-Warning "Virhe käyttäjän $($u.Name) kohdalla: $_"
    }
}

# Näytetään tulos taulukkona
$result | Sort-Object Käyttäjänimi | Format-Table -AutoSize

Tässä muokattuna tuo aiemmin jaettu koodi.
Vaihdoin tuon käyttäjävertailun ryhmissä sidiin, jotta tulisi tuloksia varmemmin.
 
Koodi:
# Listaa kaikki paikalliset käyttäjät, jotka eivät ole poistettu käytöstä
$users = Get-LocalUser | Where-Object { -not $_.Disabled }

# Haetaan kaikki ryhmät ja niiden jäsenet etukäteen
$groupMap = @{}
foreach ($group in Get-LocalGroup) {
    try {
        $members = Get-LocalGroupMember -Group $group.Name -ErrorAction SilentlyContinue
        $groupMap[$group.Name] = $members
    } catch {
        $groupMap[$group.Name] = @()
    }
}

# Kerätään tiedot jokaisesta käyttäjästä
$result = foreach ($u in $users) {
    try {
        # Käyttäjän ryhmät SID-tunnisteen perusteella
        $userSID = $u.SID
        $groupList = @()
        foreach ($entry in $groupMap.GetEnumerator()) {
            if ($entry.Value | Where-Object { $_.SID -eq $userSID }) {
                $groupList += $entry.Key
            }
        }
        $groups = $groupList -join ", "

        # Viimeinen kirjautuminen (jos saatavilla)
        $lastLogon = $u.LastLogon
        if (-not $lastLogon) { $lastLogon = "Ei tietoa" }

        # Tulostetaan yhteen objektiin
        [PSCustomObject]@{
            Käyttäjänimi = $u.Name
            KokoNimi     = $u.FullName
            Ryhmät       = $groups
            LastLogon    = $lastLogon
        }
    } catch {
        Write-Warning "Virhe käyttäjän $($u.Name) kohdalla: $_"
    }
}

# Näytetään tulos taulukkona
$result | Sort-Object Käyttäjänimi | Format-Table -AutoSize

Tässä muokattuna tuo aiemmin jaettu koodi.
Vaihdoin tuon käyttäjävertailun ryhmissä sidiin, jotta tulisi tuloksia varmemmin.
Kiitos. Pitää kokeilla toimiiko tuo paremmin. Pystyn tosin jo nyt sanomaan, että tuossa on lähes varmasti yksi ongelma: osalla käyttäjistä on noita ryhmiä jopa parikymmentä ja minun käsittääkseni tuo autosize näyttää niin paljon kun ikkunaan mahtuu. Ikkunaan vaan ei pysty mahtumaan ikinä koko ryhmälitaniaa eli se ei näytä kaikkia. Tuon ei itse asiassa tarvitse olla edes ruutuun tulostettava vaan vaikka csv käy ihan hyvin kunhan se on muodossa jossa sen saa ladattua exceliin tms. nopeasti. Kaikkien ryhmien pitäisi kuitenkin olla näkyvissä
 

Statistiikka

Viestiketjuista
290 993
Viestejä
4 982 469
Jäsenet
79 867
Uusin jäsen
peruskeijjo

Hinta.fi

Back
Ylös Bottom