newby01
Goto Top

Auslesen von Userdaten per Batch (Umsetzung aus VBA)

Hallo zusammen,

in VBA konnte ich schon Userdaten wie Vorname, Nachname und Abteilung von dem aktuell angemeldeten User auslesen.

        Dim con As New ADODB.Connection
        Dim cm As New ADODB.Command
        Dim rs As New ADODB.Recordset
        Dim objUser
        Dim strADsPath

        On Error GoTo fehler

        con.Provider = "ADsDSOObject"  

        con.Open ("Active Directory Provider")  

        cm.ActiveConnection = con

        cm.CommandText = "Select * from 'LDAP://ITDCXXXX.YYYY.de/DC=ZZZZ,DC=de' where samaccountname = '" & StrUserName() & "'"  

        Set rs = cm.Execute()

        strADsPath = ""  
        strADsPath = Trim(rs.Fields(0).Value)

        Set objUser = GetObject(strADsPath)

        rs.Close
        con.Close
        
        User_Vorname = objUser.givenname
        User_Nachname = objUser.sn
        User_Abteilung = objUser.department

        Set rs = Nothing
        Set con = Nothing
        Set cm = Nothing
        Set objUser = Nothing
        
        On Error GoTo fehler

Ich müsste dies nun unter Windows in einer Batch-Datei umsetzen und zwar so, dass die Daten in eine Datei (z.B. Userdaten.txt) gespeichert werden.

Ich habe leider keinen Plan, wie ich das machen kann.

Kann mir hier jemand auf die Sprünge helfen?

Vielen Dank im Voraus.

Content-ID: 5963872353

Url: https://administrator.de/contentid/5963872353

Ausgedruckt am: 22.11.2024 um 00:11 Uhr

5175293307
Lösung 5175293307 13.02.2023 aktualisiert um 11:07:39 Uhr
Goto Top
Pure Batch
dsquery user -samid %username% | dsget user -fn -ln -dept -L >userdaten.txt
Batch mit Powershell gewürzt
@echo off
powershell -EP Bypass -C "[adsisearcher]::new(\"(samAccountName=$env:USERNAME)\",('sn','givenname','department')).findOne() | foreach{$_.Properties['givenname'] + ',' + $_.Properties['sn'] + ',' + $_.Properties['department']} | set-content userdaten.txt"  
Such dir was aus

Wurstel
Newby01
Newby01 13.02.2023 um 11:56:02 Uhr
Goto Top
Hallo Wurstel,
das mit Powershell klappt hervorragend. Vielen Dank.
Kannst du mir nur kurz noch sagen, wie ich jeweils einen Zeilenumbruch in die Textdatei reinbekomme, so dass es in etwa so aussieht:
sn
givenname
department

THX für deine Hilfe!
5175293307
Lösung 5175293307 13.02.2023 aktualisiert um 12:00:10 Uhr
Goto Top
Zitat von @Newby01:
Kannst du mir nur kurz noch sagen, wie ich jeweils einen Zeilenumbruch in die Textdatei reinbekomme,

die
+ ',' +
einfach ersetzen durch
 + [environment]::NewLine +
oder alternativ auch mit
 + \"`r`n\" +  
Newby01
Newby01 13.02.2023 um 12:12:53 Uhr
Goto Top
Klappt hervorragend, vielen Dank.

Und nun noch eine aller Letze Frage, dann bist du mich los.
Kann ich in in der Code-Zeile
powershell -EP Bypass -C "[adsisearcher]::new(\"(samAccountName=$env:USERNAME)\",('sn','givenname','department')).findOne() | foreach{$_.Properties['givenname'] + ',' + $_.Properties['sn'] + ',' + $_.Properties['department']} | set-content userdaten.txt"  
auch der Übersicht wegen Zeilenumbrüche im Code einbauen?

Sorry, ich habe beim Einbauen von Powershell in eine Batch-Datei noch keine Erfahrung.

Danke für Deine großartige und schnelle Hilfe!
5175293307
Lösung 5175293307 13.02.2023 um 12:23:52 Uhr
Goto Top
Hybrid Batch/Powershell File

@(set "0=%~f0"^)#) & powershell -nop -ep bypass -c iex([io.file]::ReadAllText($env:0)) & exit/b  
$code = { 
	[adsisearcher]::new("(samAccountName=$env:USERNAME)",('sn','givenname','department')).findOne() | foreach{  
		$_.Properties['givenname'] + [Environment]::NewLine +  
		$_.Properties['sn'] + [Environment]::NewLine +  
		$_.Properties['department']  
	} | set-content userdaten.txt
}
start powershell -args "-nop -ep bypass -c &{$($code -replace '"','\"')}"  
Newby01
Newby01 13.02.2023 um 12:34:08 Uhr
Goto Top
Das ist echt cool. Vielen Dank!