Inventarisierung von lokalen Gruppen -> Idee

g.burck
Beiträge: 199
Registriert: 23 Mai 2018, 16:44

Inventarisierung von lokalen Gruppen -> Idee

Beitrag von g.burck »

Moin,

ich möchte gerne die Gruppenmitgliedschaft der lokalen Administratoren in unserem Netzwerk inventarisieren.
Als Ansatzpunkt hätte ich die Idee per power shell die Gruppenmitgliedschaft abzufragen und per Mail an unsere IT Adresse schicken zu lassen.

Bevor ich mir da aber die Arbeit mache: Hat jemand vielleicht einen eleganteren Weg, gibt es da schon etwas?

Grüße

Gregor
opsi config editor Version 4.1.9.8.5 (2021/04/12)

opsiconfd 4.2.0.286
mattiasmab
Beiträge: 90
Registriert: 29 Jan 2021, 12:17

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von mattiasmab »

Entweder per PSRemoting direkt die Daten abgreifen (habe ich mal für Dell BiosCodes pre OPSI gemacht). Das wäre dann sowas wie:

Code: Alles auswählen

$cred = Get-Credential ADMINUSERXYZ
$allIps (1..99) | foreach {[string]::Format("PC{0:d3}.DOMAIN.TLD",$_)}
$dataList = New-Object System.Collections.ArrayList
Write-Host "Will process $($allIps.Count) hosts"

$scriptBlockDellServiceTag = {
    $data = Get-CimInstance win32_networkadapterconfiguration -filter "ipenabled = 'True'"
    if ($data) {
        $data = $data | Select PSComputername,@{Name = "IPAddress";Expression = {$_.IPAddress }},MACAddress,@{Name="SerialNr";Expression={(Get-CimInstance win32_bios).SerialNumber}}
    }
    $data
}
$scriptblock = $scriptBlockDellServiceTag
foreach ($ip in $allIps)
        {
            Write-Host "Process $ip"
            $data = $null
            $session = New-PSSession -ComputerName $ip -Credential $cred -ErrorAction SilentlyContinue
            if (!$session) {
                $data = New-Object PSObject -Property ([Ordered]@{"PSComputerName" = "$ip [offline]"})
            } else {
                $data = Invoke-Command -ScriptBlock $scriptblock -Session $session
                $data.PSObject.Properties.Remove("RunspaceId")
                $data.PSObject.Properties.Remove("PSShowComputerName")
                $data | Add-Member NoteProperty DnsName ([System.Net.Dns]::GetHostEntry($ip).HostName)
                $session | Remove-PSSession
            }
            [void]$dataList.Add($data)
        }
$dataList | Export-Csv -LiteralPath "$($MyInvocation.MyCommand.Definition).datalist-$([datetime]::Now.ToString("s").replace(":","-")).csv"
Der Scriptblock müsste natürlich kurz durch die Abfrage ersetzt werden, aber das hast du ja scheinbar. Wäre ansonsten sowas wie:

Code: Alles auswählen

#$groupName = "Administratoren"
#$group = Get-WmiObject -Class Win32_Group -Filter "Name='$GroupName'"
$group = Get-WmiObject -Class Win32_Group -Filter "SID='S-1-5-32-544'" # entsprechend der Anregung von Jens
$data = @($group.GetRelated('Win32_UserAccount') | Select-Object -ExpandProperty Name) -join "`n"
$data = New-Object psobject -Property ([ordered]@{Gruppe=$groupName;Benutzer=$data})
$data #| ft -Wrap -AutoSize
Das ist zwar jetzt die synchrone Variante und somit etwas langsam bei sehr vielen Clients, aber notfalls melden, falls das interessant sein sollte.

Etwas durch die Blume wäre das vielleicht auch über die Hardwareinventarisierung von OPSI möglich. Das kann ja als WMI Abfrage erledigt werden und könnte dort somit als Eintrag ergänzt werden. Allerdings habe ich das noch nie aktiv genutzt, weshalb ich nichts konkretes sagen kann, aber das Manuel gibt dazu ja auch ein wenig zu aus (siehe Abschnitt 8.3 Inventarisierung).
Zuletzt geändert von mattiasmab am 19 Aug 2021, 00:55, insgesamt 2-mal geändert.
Jan.Schmidt
Beiträge: 439
Registriert: 08 Jul 2017, 12:02

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von Jan.Schmidt »

Hi

das ist ja echt ein spannendes Thema :lol:

Ich versteh nur nicht, warum muß man da was entwickeln?
Oder warum fragt man in dem OPSI Forum etwas das den Inhalt hat "per mail den Admins schicken?"
back 2 the roots warum immer mit Bauer Maria Schell auftrumpfen um dann nur einen schnöden Wrapper um ne banale WMI Abfrage abzuliefern wenn ein simpler Einzeiler das schneller kann?

Code: Alles auswählen

for /f "skip=6" %a in ('net localgroup administratoren') do if not "%a" == "Der" echo %a
PS: Ein Hoch auf zwei Prozent, falls das in ein script soll.
mattiasmab
Beiträge: 90
Registriert: 29 Jan 2021, 12:17

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von mattiasmab »

Jan.Schmidt hat geschrieben: 17 Aug 2021, 20:01 Ich versteh nur nicht, warum muß man da was entwickeln?
Normalerweise antworte ich auf sowas nicht, aber der Befehl alleine lässt die Daten nicht inventarisieren - also zentral erfasst. Und das war maßgebend, egal ob per Mail oder sonst wie (Mail bei vielen Clients ist aber eigentlich nicht händelbar). Dein Befehl hingeben hat auch noch den Nachteil, dass er nicht mit lokalisierten Umgebungen funktionieren würde, deshalb die zwei Zeilen mehr als Powershell (im Grunde kann ja sogar auch alles als eine geschrieben werden - die zwar definitiv länger ist, aber generischer einsetzbar ist).

Allerdings hatte ich die Frage falsch gelesen, was durch deine Antwort auffiel. Ich habe als Beispiel alle Gruppen eines Benutzers und nicht alle Benutzer einer Gruppe. Ist aber das selbe in Grün :)

chio
Jan.Schmidt
Beiträge: 439
Registriert: 08 Jul 2017, 12:02

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von Jan.Schmidt »

Hi,

der befehl alleine ist ein Befehl, was du damit machst - ist egal.
Woher soll der geneigte Antwortende Wissen, ob oder ob nicht ein blat installiert, der mit oder mit ohne credentials genutzt usw...
Daran so ein simples doppelgrößer \\server\freigabe\meineStifte.log dranmalen nun auch nicht sooo kompliziert?

Zu deinem Einwand nicht in einer lokalisierten Umgebung - was genau ist da dann der Unterschied zu deinem

Code: Alles auswählen

$groupName = "Administratoren"
Klemm halt ein

Code: Alles auswählen

for /f "tokens=1 delims=^*" %a in ('net localgroup ^|findstr /c:"dmini"^|findstr /v /c:"Hyper"') do set admins=%a
davor und frag dann %admins% ab...
Ein bisschen creativität ist ja dann nicht zuviel verlangt, ist ja schliesslich ein Job für den es eine Ausbildung gibt. ;)
g.burck
Beiträge: 199
Registriert: 23 Mai 2018, 16:44

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von g.burck »

Moin,

danke für die Antworten, ich komme erst jetzt die Tage wieder dazu mich mit dem Thema zu beschäftigen.

Grüße

Gregor
opsi config editor Version 4.1.9.8.5 (2021/04/12)

opsiconfd 4.2.0.286
g.burck
Beiträge: 199
Registriert: 23 Mai 2018, 16:44

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von g.burck »

Moin,

ich bin ein Stück weiter:

In einer DosInAnIcon Section führe ich net localgroup administratoren aus.
Den Rückgabe Wert lasse ich mir in eine StringList schreiben.

Jetzt schaffe ich es schon, den Inhalt der Stringlist ins Log zu schreiben:

comment composeString($localAdminList$, ",")

Da der Inhalt der StringList im Prinzip schon eine CSV ist, möchte ich den Inhalt gerne nicht ins Log, sondern in eine auf dem Server liegende Datei schreiben/ketten. Ich denke dann habe ich ein Ergebnis welches ich auswerten kann.

Bloß, wie kann ich das? Mit einem OpsiServiceCall habe ich für ein anderes Paket ja eine Produktproperty beeinflussen können.
Da müsste ich doch sicher auch den Inhalt einer Variable in eine Datei auf dem Server ausgeben lassen?

Grüße

Gregor
opsi config editor Version 4.1.9.8.5 (2021/04/12)

opsiconfd 4.2.0.286
SirTux
Beiträge: 558
Registriert: 05 Feb 2011, 18:37

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von SirTux »

Moin Gregor,

warum machst du das nicht mit Diensten, die für sowas gedacht sind? Ich würde telegraf nehmen ...

Viele Grüße,
Stefan
g.burck
Beiträge: 199
Registriert: 23 Mai 2018, 16:44

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von g.burck »

SirTux hat geschrieben: 20 Sep 2021, 17:03 warum machst du das nicht mit Diensten, die für sowas gedacht sind? Ich würde telegraf nehmen ...
Weil ich's nicht kenne?

Ist ja der Grund warum ich den Thread hier eröffnet habe.
Und eigentlich komme ich jetzt wirklich in die Richtung in die ich eigentlich wollte. Das mit dem Mail war ja nur eine Krücke, weil ich nicht wusste wie ich die Daten zentral sammeln soll.

Wenn ich jetzt aber die Daten in einer definierten Datei auf dem Server ablegen kann, benötige ich die Mail ja nicht.

Grüße

Gregor
opsi config editor Version 4.1.9.8.5 (2021/04/12)

opsiconfd 4.2.0.286
SirTux
Beiträge: 558
Registriert: 05 Feb 2011, 18:37

Re: Inventarisierung von lokalen Gruppen -> Idee

Beitrag von SirTux »

g.burck hat geschrieben: 21 Sep 2021, 08:11 Weil ich's nicht kenne?
IMO versuchst du mit einem Hammer schrauben zu befestigen.Wenn ihr noch kein vernünftiges Monitoring habt, kann ich nur den TIG-Stack (Telegraf, Influxdb, Grafana) empfehlen.
Antworten