Benutzer mit den meisten Antworten
Export in CSV / txt

Frage
-
Hallo zusammen,
ich habe online ein tolles Powershell Skritp gefunden, das mir alle Mitglieder der Administratoren-Gruppe eines Computers anzeigt. (funktioniert auch 1A)
Gruppen löst es automatisch auf und zeigt alle Gruppenmitglieder an.
Jetzt würde ich das Ergebnis gerne als .csv oder .txt exportieren.
Leider habe ich keine großen Erfahrungen in Powershell, und alle Sachen die ich bisher versucht habe sind gescheitert, z. B. habe ich versucht einfach am Ende das hier einzufügen:
| export-csv C:\Data\Powershell\localAdmins.csv
Das hat zumindest bei meinem Eventlog Export funktioniert um es zu exportieren.
Das einzige was im Code unten geändert werden muss ist "Computername". Laufen soll es auf einem englischen 2008 R2 Server
# PSEnumLocalGroup.ps1 # PowerShell script to enumerate members of a local group. # # ---------------------------------------------------------------------- # Copyright (c) 2011 Richard L. Mueller # Hilltop Lab web site - http://www.rlmueller.net # Version 1.0 - April 4, 2011 # Version 1.1 - June 24, 2011 - Escape any "/" characters in DN's. # # This program demonstrates how to enumerate members of a local group. # Reveals direct membership in the local group, membership in nested # local groups, membership in domain groups that are members of the # local group, and membership in nested domain groups. # # You have a royalty-free right to use, modify, reproduce, and # distribute this script file in any way you find useful, provided that # you agree that the copyright owner above has no warranty, obligations, # or liability for such use. Trap {"Error: $_"; Break;} Function EnumLocalGroup($LocalGroup) { # Invoke the Members method and convert to an array of member objects. $Members= @($LocalGroup.psbase.Invoke("Members")) ForEach ($Member In $Members) { $Name = $Member.GetType().InvokeMember("Name", 'GetProperty', $Null, $Member, $Null) $Path = $Member.GetType().InvokeMember("ADsPath", 'GetProperty', $Null, $Member, $Null) $Path # Check if this member is a group. If ($Member.GetType().InvokeMember("Class", 'GetProperty', $Null, $Member, $Null) -eq "group") { # Check if this group is local or domain. If ($Path -like "*/$strComputer/*") { # Enumerate members of local group. EnumLocalGroup $Member } Else { # Enumerate members of domain group. EnumDomainGroup $Member $Name $True } } } } Function EnumDomainGroup($DomainGroup, $NTName, $blnNT) { If ($blnNT -eq $True) { # Convert NetBIOS domain name of group to Distinguished Name. $objNT.InvokeMember("Set", "InvokeMethod", $Null, $objTrans, (3, "$strNetBIOSDomain$NTName")) $DN = $objNT.InvokeMember("Get", "InvokeMethod", $Null, $objTrans, 1) $DN = $DN.Replace("/", "\/") $Group = [ADSI]"LDAP://$DN" } Else { $DN = $DomainGroup.distinguishedName $Group = $DomainGroup } ForEach ($MemberDN In $Group.Member) { $MemberDN = $MemberDN.Replace("/", "\/") $MemberGroup = [ADSI]"LDAP://$MemberDN" $MemberGroup.ADsPath # Check if this member is a group. If ($MemberGroup.Class -eq "group") { EnumDomainGroup $MemberGroup $MemberGroup.Name $False } } } # Specify the local group. $strGroup = "Administrators" # Retrieve Distinguished Name of current domain. $Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() $Root = $Domain.GetDirectoryEntry() $Base = ($Root.distinguishedName) # Use the NameTranslate object. $objTrans = New-Object -comObject "NameTranslate" $objNT = $objTrans.GetType() # Initialize NameTranslate by locating the Global Catalog. $objNT.InvokeMember("Init", "InvokeMethod", $Null, $objTrans, (3, $Null)) # Retrieve NetBIOS name of the current domain. $objNT.InvokeMember("Set", "InvokeMethod", $Null, $objTrans, (1, "$Base")) $strNetBIOSDomain = $objNT.InvokeMember("Get", "InvokeMethod", $Null, $objTrans, 3) # Specify the computer. $strComputer = "MyComputer" "Computer: $strComputer" # Bind to the group object with the WinNT provider. $Group = [ADSI]"WinNT://$strComputer/$strGroup,group" "Group: $strGroup" EnumLocalGroup $Group
Hat jemand eine Idee?
Antworten
-
Das Ergebnis ist ein einfaches Array. Ersetze einfach die letzte Zeile durch:
EnumLocalGroup $Group | set-content C:\Data\Powershell\localAdmins.txt
dann geht's. Damit werden die Ergebnisse einer nach dem anderen über die Pipeline an den Ausgabebefehl gesandt. Du kannst dort natürlich genauso gut "export-csv" benutzen, macht aber bei einer einfachen Liste wenig Sinn.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 25. Oktober 2012 21:35
- Als Antwort vorgeschlagen Peter Kriegel Freitag, 26. Oktober 2012 07:49
- Als Antwort markiert Chris Traveler Freitag, 26. Oktober 2012 08:06
Alle Antworten
-
Das Ergebnis ist ein einfaches Array. Ersetze einfach die letzte Zeile durch:
EnumLocalGroup $Group | set-content C:\Data\Powershell\localAdmins.txt
dann geht's. Damit werden die Ergebnisse einer nach dem anderen über die Pipeline an den Ausgabebefehl gesandt. Du kannst dort natürlich genauso gut "export-csv" benutzen, macht aber bei einer einfachen Liste wenig Sinn.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 25. Oktober 2012 21:35
- Als Antwort vorgeschlagen Peter Kriegel Freitag, 26. Oktober 2012 07:49
- Als Antwort markiert Chris Traveler Freitag, 26. Oktober 2012 08:06
-
Thank you. That was the thing I needed.
It's working on several Win2008 and Win2003 Servers, but no on every 2003 Server. Guess it's because of the old powershell version?
C:\>powershell Windows PowerShell Copyright (C) 2006 Microsoft Corporation. All rights reserved. PS C:\> cd C:\Data\getAdmins PS C:\Data\getAdmins> .\getAdmins.ps1 Computer: xxx
Group: Administrators WinNT://NAVIGON/navsql01-vsrv/Administrator WinNT://NAVIGON/Domänen-Admins Error: Exception has been thrown by the target of an invocation. Exception calling "InvokeMember" with "5" argument(s): "Exception has been thro wn by the target of an invocation." At C:\Data\getAdmins\getAdmins.ps1:55 char:28 + $objNT.InvokeMember( <<<< "Set", "InvokeMethod", $Null, $objTrans, (3 , "$strNetBIOSDomain$NTName")) PS C:\Data\getAdmins> -
Sehr wahrscheinlich. Da sich Powershell V2 ja problemlos auf Server 2003 (mit SP2) installieren lässt, kannst du das ja einfach ausprobieren.
Grüße, DenniverBlog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". -
Nein, das geht ohne reboot. Eine Installation auf einem identischen Testsystem, um unvorhergesehene Seiteneffekte mit installierter Software zu vermeiden ,ist natürlich wie bei allen Installationen in einer Produktionsumgebung angeraten.
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". -
Ich stehe wieder vor einem neuen Problem.
Könnt ihr mir sagen wie ich die Domäne manuell bestimmen kann, also keine automatische Domainauflösung bekomme?
# Initialize NameTranslate by locating the Global Catalog. $objNT.InvokeMember("Init", "InvokeMethod", $Null, $objTrans, (3, $Null)) # Retrieve NetBIOS name of the current domain. $objNT.InvokeMember("Set", "InvokeMethod", $Null, $objTrans, (1, "$Base")) $strNetBIOSDomain = $objNT.InvokeMember("Get", "InvokeMethod", $Null, $objTrans, 3)
Müsste ja vermutlich irgendwo hier sein, oder?
Danke und Grüße
-
Hallo Chris!
Da dieser Thread als beantwortet (Grün) markiert ist, wird er von vielen nicht mehr beachtet !
Bitte stelle deine Frage in eine neuen Thread (pro thread eine Frage)!
Bitte versuche deine Frage beser zu stellen, ich zumindest verstehe nicht was du meinst!Meinst du es etwa so?:
$strNetBIOSDomain = Read-Host "Bitte Domäne eingeben" # eingelesene Domäne anzeigen: $strNetBIOSDomain
http://www.rlmueller.net/PowerShell/PSEnumLocalGroup.txt
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Donnerstag, 1. November 2012 13:35