Jump to content

newbi2009

Members
  • Gesamte Inhalte

    31
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von newbi2009

  1. Hi Evgenij,

     

    danke für den Tipp mit $ErrorActionPreference. Das ist okay für mich. :thumb1:

    Unsere Firmen-Policies sind relativ strikt, sodass es ein schier endloser Prozess ist, neue Software (auch Powershell-Module sind "neue Software") genehmigt zu bekommen, daher der Weg über die externen *.exe-Dateien

     

    Bleibt meine zweite Frage: Warum funktioniert der Bind nur bei jedem zweiten Lauf???

     

    Gruß

    Holger

  2. Hallo zusammen,

    wir betreiben einen/mehrere LDAP Server (kein Active Directory). Bisher habe ich für Powershell-basierende Abfragen immer die von Lotus Notes mitgeliferten ComandLine-Tools (hier ldapsearch.exe) benutzt, was ganz gut funktioniert hat. Leider wird uns wohl bald der Notes client und somit auch die da mit kommenden LDAP CL-Tools deinstalliert, sodass ich mich nach einer anderen Lösung umschauen musste... Hier bin ich auf "open LDAP for Windows" gestossen. Software ist nun installiert und ich kann auf die cl-Tools zugreifen. Jetzt zu meinem zwei Problem:

    Eins vorweg: Egal, ob ich den Bind mit "-x" oder ohne durchführe, ist das Ergebnis das Gleiche

     

     & "C:\OpenLDAP\ClientTools\ldapsearch.exe" -H ldap://XXXXX.home.local:2390 -D $username -w $script:pw -b $script:DN -s base "objectClass=*" userCertificate > $safepath

     oder Bind mit „-x“ – kein Unterschied:

    & "C:\OpenLDAP\ClientTools\ldapsearch.exe" -x -H ldap://XXXXX.home.local:2390 -D $username -w $script:pw -b $script:DN -s base "objectClass=*" userCertificate > $safepath

     

    ich bekomme IMMER folgende Fehlermeldung im Programmfenster (Powershell ISE) angezeigt (auch ein Umleiten mit 2>&1 bringt nicht mehr Fehlermeldungs-Text in der Ausgabe-Datei)

     

    ldapsearch.exe : ldap_bind: Success (0)

    In C:\Users\xxxxx\Documents\Powershell-Scripte\Benutzer von PROD in TEST\Benutzer_von_PROD_nach_TEST.ps1:498 Zeichen:18

    + ...             & "C:\OpenLDAP\ClientTools\ldapsearch.exe" -H ldap://xxxx ...

    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : NotSpecified: (ldap_bind: Success (0):String) [], RemoteException

        + FullyQualifiedErrorId : NativeCommandError

     

           additional info: Bind succeeded.

     

    Ich verstehe nicht, was hier "angemeckert" wird. Es steht explizit  in der Meldung, dass der Bind funktioniert hat, und auch die Ausgabe funktioniert korrekt

     

    Dies ist der Text der Ausgabedatei)

    --------------------------------------- 

    # extended LDIF

    #

    # LDAPv3

    # base < cn=DoeJohn,ou=Extern,ou=Three,o=Two,c=One > with scope baseObject

    # filter: objectClass=*

    # requesting: userCertificate

    #

    # DoeJohn, Extern, Three, Two, One

    dn: cn=DoeJohn,ou=Extern,ou=Three,o=Two,c=One

    userCertificate;binary:: MIIHaDCCBVCgAwIBAgIDSHYqMA0GCSqGSIb3DQEBCwUAMFwxCzAJB

    gNVBAYTAkRFMRkwFwYDVQQKExBQS0ktMS1WZXJ3YWx0dW5nMRMwEQYDVQQLEwpCdW5kZXN3ZWhyMR

    0wGwYDVQQDExRCdyBWLVBLSSBDQSAyMDIyIC0gMjAeFw0yMzAyMTUxMDEwMDlaFw0yODAyMTUxMDE

    wMDlaMFgxCzAJBgNVBAYTAkRFMQ0wCwYDVQQKEwRidW5kMQ0wCwYDVQQLEwRibXZnMRAwDgYDVQQL

    EwdwZXJzbWlsMRkwFwYDVQQDExBHZXV0aW5nIFRob3JzdGVuMIICIjANBgkqhkiG9w0BAQEFAAOCA

    qvkJ++i7MSkz6FguCrewZ+d3QiogHFh5QI77zQklognb+6GhGyH9Iv0amzRLCVWyWgxPMw0OUs92K

    7H4thYcNpl/l8QB5rf0v/R23vSEOgMqypkORkNGRZ2hf36kWuJPil60657xAbfoArGXdiF+Hs+tv8

    zPkdwrTtg9flgDVVeceRfGDzuaUf0NYU2ee7xBVO2oJyd1mgBDdZfMihRTrYM70+ewmqDYp4wiuCb

    wsh++XX9hts9BI+ldO2Lm4FMmoOjQjg5/SrdWh6gLEeLeZDmxSXtl8WafGlLpLDRNK3zYiaR+soW4

    EEWI6kz0ZhqRAs0AQlQcD5qqCTmWvylvtjPyRnW1NA4fpc7RIi02Zcj2v7pdsd+lnwZ8sr9UblQFi

    WqKSFk/hvvgdzCVwA==

    # search result

    search: 2

    result: 0 Success

    text: Search succeeded. Found 1 Entries (0 Aliases), 1 Attributes, 1 Values. (C

    hainedResult=no)

    # numResponses: 2

    # numEntries: 1

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

     

    Was ich aber noch viel merkwürdiger finde, ist der Fakt, dass ich bei JEDEM 2. VERSUCH, das Skript laufen zu lassen, den Fehler bekomme, dass das Bind NICHT funktioniert hat: 

     

    ldapsearch.exe : ldap_bind: Success (0)

    In C:\Users\xxxxx\Documents\Powershell-Scripte\Benutzer von PROD in TEST\Benutzer_von_PROD_nach_TEST.ps1:498 Zeichen:18

    + ...             & "C:\OpenLDAP\ClientTools\ldapsearch.exe" -x -H ldap://x ...

    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : NotSpecified: (ldap_bind: Success (0):String) [], RemoteException

        + FullyQualifiedErrorId : NativeCommandError

           additional info: Bind succeeded.

    ldap_result: Can't contact LDAP server (-1)

     

    Dann ist die Ausgabedatei auch "quasi" leer:

     

    # extended LDIF

    #

    # LDAPv3

    # base < cn=DoeJohn,ou=Extern,ou=Three,o=Two,c=One > with scope baseObject

    # filter: objectClass=*

    # requesting: userCertificate

    #

    # numResponses: 0

     

     

    Kann mich hier irgend jemand erleuchten, wo/was genau mein Fehler ist?

     

    Vielen Dank

    Gruß

    Holger

  3. Hallo zusammen,

    danke für die Antworten.

    Nur falls es noch interessiert: Ich habe es jetzt gelöst, indem ich 2 verschiedene WMI Abfragen "gebaut" habe - und die beiden Ausgaben hintereinander anzeigen lasse:

     

    1. Abfrage nach "welcher Adapter verbunden ist (LAN oder WLAN)

    SELECT  NetConnectionID FROM Win32_NetworkAdapter WHERE NetConnectionID = 'WLAN' or NetConnectionID = 'ETHERNET'  and NetEnabled = 'TRUE'

      => @zahni: Das funktioniert doch....

     

    2. Abfrage nach der IPAdresse:

    SELECT IPAddress FROM Win32_NetworkAdapterConfiguration where DNSDomain = 'homedomain' 

     

    Gruß

    Holger

  4. Hallo zusammen,

     

    ich suche jetzt schon seit einiger Zeit, finde aber nicht wirklich etwas hierzu.

     

    Wir haben einen bestimmten Dienst auf etlichen Servern mit einem bestimmten Domänen-Konto laufen.

    Da wir (Policy-bedingt) Passwörter für Service-Accounts alle 180 Tage ändern müssen, bin ich gerade dabei hierfür ein Programm zu schreiben.

    Leider finde ich keine Möglichkeit per PS die Passwörter für die ausführenden (Domänen)-Konten für bestimmte Dienste zu ändern.

     

     mit Get-Service kommt man da anscheinend nicht wirklich weiter...

     

    Hat da irgendjemand eine Idee/Ansatz?

     

    vielen Dank für Eure Schwarmintelligenz

    Gruß und ein schönes WE

    Holger

  5. nein, das funktioniert leider auch nicht.....

     

    Ich hatte eigentlich gedacht, das wäre ein Microsoft Modul...

    https://learn.microsoft.com/de-de/powershell/utility-modules/secretmanagement/overview?view=ps-modules

     

    Aber wenn man dem KeePass-Link auf dieser URL folgt, kommt man tatsächlich zu dem Projekt, dass Du da aufgezeigt hast.... b***d! Ich habe echt nicht gesehen, dass der letzte EIntrag 3 Jahre alt ist.....

  6. Hallo Forum,

     

    ich "spiele" gerade mit den PowerShell Modulen für SecretVault bzw KeePass-Zugriff herum:

    Microsoft.Powershell.SecretManagement,

    Microsoft.Powershell.SecretStore,

    SecretManagement.KeePass

     

    Dabei stoße ich auf das Problem, dass ich das MasterPassword für die KeePass irgendwie nicht wirklich übergeben bekomme. Egal, ob ich das PW in Klars***rift oder als SecureString übergebe...:

    Version1

    $KeePassParameter = @{
        Path = "D:\KeePass\Meine_KPDB.kdbx";
        ShowFullTitle = $true;
        UseMasterPassword = $true;
        MasterPassword = "01000000d08c9ddf0115d1118c7a00c04fc297e...."
      }
    Register-SecretVault -Name KeePassVault -ModuleName SecretManagement.KeePass -VaultParameters $KeePassParameter
     

     

    oder Version2

    $KeePassParameter = @{
        Path = "D:\KeePass\Meine_KPDB.kdbx";
        ShowFullTitle = $true;
        UseMasterPassword = $true;
        MasterPassword = "Test-PW"
    }
    Register-SecretVault -Name KeePassVault -ModuleName SecretManagement.KeePass -VaultParameters $KeePassParameter

     

    ...ich bekomme bei der Abfrage der SecureVault immer

    Get-SecretInfo -Vault KeePassVault

    immer eine grafische Abfrage des MasterPasswords. (siehe Screenshot) Hat jemand eine Idee, wie ich das MasterPassword korrekt übergebe, sodass ich auf die SecureVault ohne zusätzliche PW-Abfrage zugreifen kann?

     

    Vielen Dank für Eure Hilfe

    Gruß

    Holger

    image.png

  7. Hallo Forum,

     

    ich versuche den Inhalt einer Spalte eines Excel-Worksheets in einer Combo-Box auszugeben.

    Grundsätzlich funktioniert das auch. Zumindest sind in, "$objCombobox.items" die gewünschtenNamen gespeichert.

    Allerdings bekomme ich in der Combo-Box selber nur 4 x "system Object[]" angezeigt.

     

    Wo liegt mein Fehler?

     

    Hier mein Code:

     

    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    $Namen = @()
    $Zeile=1
    $Page = "User"
    
    $objForm = New-Object System.Windows.Forms.Form 
    $objForm.Text = "Combobox"
    $objForm.Size = New-Object System.Drawing.Size(300,200) 
    $objForm.StartPosition = "CenterScreen"
    $objForm.KeyPreview = $True
    
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Size(75,120)
    $OKButton.Size = New-Object System.Drawing.Size(75,23)
    $OKButton.Text = "OK"
    $OKButton.Add_Click(
       {
     foreach ($objItem in $objCombobox.SelectedItem)
             {$global:x = $objItem
              $global:x}
             $objForm.Close()
           })
    $objForm.Controls.Add($OKButton)
    
    $CancelButton = New-Object System.Windows.Forms.Button
    $CancelButton.Location = New-Object System.Drawing.Size(150,120)
    $CancelButton.Size = New-Object System.Drawing.Size(75,23)
    $CancelButton.Text = "Cancel"
    $CancelButton.Add_Click({$objForm.Close()})
    $objForm.Controls.Add($CancelButton)
    
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,20) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Treffen Sie bitte eine Auswahl:"
    $objForm.Controls.Add($objLabel) 
    
    $objCombobox = New-Object System.Windows.Forms.Combobox 
    $objCombobox.Location = New-Object System.Drawing.Size(10,40) 
    $objCombobox.Size = New-Object System.Drawing.Size(260,20) 
    $objCombobox.Height = 70
    
    $objexcel=New-Object -ComObject Excel.Application
    $workbook=$objexcel.WorkBooks.Open('C:\temp\Users.xlsx')
    $worksheet=$workbook.WorkSheets.item($Page)
    $objexcel.Visible= $false
    
    
    do {
          $Namen = @($worksheet.Cells.Item($Zeile,1).Text)
          write-host Name = $Namen
          [void] $objCombobox.Items.Add($Namen)
          $Zeile++
           }
    while($worksheet.Cells.Item($Zeile,1).Text.Length -gt 0)
    
    $objexcel.quit()
    $objForm.Controls.Add($objCombobox) 
    
    $objForm.Topmost = $True
    $objForm.Add_Shown({$objForm.Activate()})
    [void] $objForm.ShowDialog()

    Die Excel-Tabelle sieht so aus:

    image.png.442c1709ac949a12c549757d9411ce1e.png

     

    und die Combo-Box selber sieht so aus:

     

    image.png.d27987033745c71640c715713960a3e6.png

     

    vielen Dank für Eure Hilfe

    Holger

  8. vor 44 Minuten schrieb Sunny61:

    Zum Thema Pfad des Scriptes auslesen findest Du hier ein Beispiel: https://www.itnator.net/psscriptroot-beinhaltet-pfad-des-powershell-scripts/

    Bau dir das mal in dein Script an der richtigen Stelle ein und lass dir mit write-host $PSScriptRoot den Pfad ausgeben. Wenn es der richtige ist, dann geht es weiter.

     

    Verknüpfungen legt man nicht manuell an, sondern lässt sie per GPO bei den betroffenen Usern *aktualisieren*, dann passt der Aufruf. ;)

    THIS did the trick  :thumb1:

    Vielen Dank!!

  9. Hallo Nobby,

     

    danke für die Antwort.

    Naja, die Firmen-Policies lassen es einfach nicht zu, exe-Dateien selber zu kompilieren

    Der UNC-Pfad sollte tatsächlich bei allen Benutzern gleich sein. Dann müsste ich den "Installationspfad" aber manuell in das Skript schreiben

    ala: \\Server\Freigabe\Skripte

     

    Das würde mit Sicherheit auch funktionieren.

    Ich würde das Ganze aber gerne eleganter lösen. Z.B. für den Fall, dass das Verzeichnis "Skripte" einmal an einen anderen Ort verschoben werden sollte

     

    Mein Skript sieht in etwa so aus:

     

    function Uhr()
    {
     $Date = Get-Date
     $Time= $Date.toString()("yyyy-MM-dd_HH.mm.ss")
     $Datum= $Time.toString("yyyy-MM-dd")
    }
    
    $InstallPath = $PWD.ToString()
    Uhr
    $LogDateiName = "$InstallPath\Logs\$Satum\MeinSkriptname_" + $Time +".log"
    .
    .
    .
    write-output "Diese Zeile soll in die Log-Datei eingetragen werden" | Tee-Object -FilePath $LogDateiName -append

     

     

    Danke und Gruß

    Holger

     

     

     

    Hallo BOfH_666,

     

    auch Dir "danke" für Deine Antwort.

     

    Ich möchte es eigentlich vermeidenzu allen Kollegen zu latschen und einen Link auf die ps.1-Datei zu erstellen.

    Ausserdem bin ich mir nicht ganz sicher, ob der Link das Problem lösen würde.

    Es würde dann doch der Pfad des lokalen Rechners ausgelesen - also würden die Log-Dateien wieder nicht alle im gleichen Verzeichnis (Netzlaufwerk) landen.....

     

    Dass die Datei mit der PowerShell.exe ausgeführt werden sollte ist mir schon klar. Aber es wird (glaube ich) halt standardmäßig die 64bit Version ausgeführt, die gegen die Pumpe läuft, wenn man versucht damit eine LotusNotes-Anwendung auszulesen....

     

    Und alles andere als rechter Mausklick / Ausführen mit  kann ich meinen Kollegen nicht zumuten :-)

  10. Hallo Forum,

     

    ich habe ein kleines Problem und hoffe, es gibt eine einfache Lösung hierzu:

    Ich habe ein Powershell-Skript geschrieben, welches ich auf einem Netzlaufwerk (nennen wir es Z:\Skripte\meinSkript.ps1) abgelegt habe.

    Dieses Skript schreibt Log-Dateien, die im gleichen Verzeichnis erzeugt werden sollen (Z:\Skripte\Logs)

    Ausserdem soll dieses Skript von allen meinen Kollegen benutzt werden können, die sich das Netzlaufwerk aber nicht alle mit "Z:\" gemappt haben.

     

    Um die Log-Datein also an dem gewünschten Ort abzulegen, muss ich den Netzwerkpfad der ps1-Datei auslesen.

     

    Jetzt gibt es ein paar Probleme:

    - Windows öffnet ps.1-Dateien standardmäßig mit einem Text-Editor (Doppelklick auf die Datei führt diese nicht aus)

    - Ich kann/darf aus der ps.1 keine exe kompilieren, die per Doppelklick ausgeführt werden könnte

    - mein Script MUSS in einer 32 Bit Variante von PowerShell ausgeführt werden (weil ich Lotus Notes abfrage) - Das heisst, "rechter Mausklick/öffnen mit Powershell" lässt das Skript abbrechen, weil Powershell standardmäßig in einer 64 bit Version startet

     

    Ich muss das Skript also in einer "Powershell ISE" öffnen (vor Allem meine nicht PowerShell-affinen Kollegen). Hier steht der Fokus natürlich auf C:\Windows\System32

     

    Lese ich jetzt den Pfad mit  "get-location" oder "PWD" aus, bekomme ich natürlich "C:\Windows\System32" geliefert. Dies kann ich dann natürlich nicht verwenden, um den Pfad für eine Log-Datei in dem Netzlaufwerk zu generieren.

    Ich kann den Kollegen auch nicht sagen, dass sie sich das Programmverzeichnis alle auf den eigenen Rechner kopieren sollen und die erzeugten Logs dann manuell auf dem Netzlaufwerk ablegen sollen.

     

    Wie bekomme ich also in der "Power Shell ISE" den Pfad in eine Variable, in der die ps1-Datei liegt?

     

    Vielen Dank für einen Tipp

    Gruß

    Holger

     

     

     

     

     

     

     

     

     

     

  11. vor 4 Minuten schrieb BOfH_666:

    Punkte sind, wenn es um regex geht "spezielle Zeichen". Der Punkt steht für ein beliebiges Zeichen. Wenn Du also wirklich einen Punkt ersetzen willst, musst Du ihn "Escapen". 

     

    Im einfachsten Fall so ... 

    "2261 4405 ..." -replace '\s\.\.\.'

     

    Das Escape-Zeichen ist der Backslash "\" und das "\s" steh hier für ein "White-Space" - also ein Leerzeichen oder ein Tab .... 

    VIELEN DANK!!

  12. Hallo Forum,

    ich kämpfe gerade mit einem Problem, das ich nicht verstehe. Vielleicht kann mich ja jemand von Euch erleuchten? :-)

     

    Ich versuche Punkte aus einer Variable (in der eine Faxnummer gespeichert ist) zu ersetzen

     

    ich habe in einer globalen Variable eine Faxnummer mit Leerzeichen und 3 Punkten dahinter gespeichert:

     

    $global:Fax = "2261 4405 ..."

    jetzt versuche ich das Leerzeichen und die darauf folgenden 3 Punkte zu entfernen:

    if ($global:Fax -like ("* ..."))
     {
        $global:Fax_neu = $global:Fax -replace (" ...","")
     }

     

    Der Inhalt von $global:Fax_neu ist jetzt erstaunlicherweise: 22615

     

    Warum? Und wie bekomme ich es hin, dass 

    $global:Fax_neu = 2261 4405

    ist?

    vielen Dank für Eure Hilfe

    Gruß

    Holger

     

  13. vor 6 Minuten schrieb NilsK:

    Moin,

     

    was uns zum Anfang zurückführt ... lässt sich der Umweg über CSV, vielleicht sogar der über Excel vermeiden? Falls nicht, dann ist es vielleicht wirklich am einfachsten, die Importdatei erst zu korrigieren und dann zu verarbeiten.

     

    Gruß, Nils

     

    ....was mich dann wieder zu meiner ursprünglichen Frage führt: MUSS ich den Umweg gehen, den Inhalt der Variable zuerst in eine Datei zu speichern, nur um diese danach wieder einzulesen?

    Das muss doch auch ohne gehen.... Aber wie?

  14. vor 34 Minuten schrieb Sunny61:

    Und was genau heißt funktioniert das Ganze nicht mehr?

    Zu ladene CSV_Datei Ohne " als erstes Zeichen:

     

    Zeile 01
    Zeile 02
    Zeile 03
    Zeile 04
    Zeile 05
    Schmitz;Harald;Schmitz@zuHause.de;123456;
    ;Heiner;;234567;
    Müller;;Mueller@zuHause.de;;
    Maier;Susanne;;456789
    ;;;;;;;;;;;;;;

     

    PS C:> $abc = @(import-csv -path C:\temp\Test.csv  -Header "Nachname","Vorname","Email","PersonalNummer"  -Delimiter ";"| Select-Object -skip 5)
    
    PS C:> $abc
    
    Nachname Vorname Email              PersonalNummer
    -------- ------- -----              --------------
    Schmitz  Harald  Schmitz@zuHause.de 123456        
             Heiner                     234567        
    Müller           Mueller@zuHause.de               
    Maier    Susanne                    456789        
                                                      
    
    
    PS C:> $abc[1]
    
    Nachname Vorname Email PersonalNummer
    -------- ------- ----- --------------
             Heiner        234567        
    
    
    
    PS C:> $abc[1].Vorname
    Heiner
    
    PS C:> 

     

    Bei einer zu ladene CSV_Datei MIT " als erstes Zeichen einer beliebigen der ersten 5 Zeilen, füllt sich die Variable $abc nicht mehr:

     

    Zeile 01
    "Zeile 02
    Zeile 03
    Zeile 04
    Zeile 05
    Schmitz;Harald;Schmitz@zuHause.de;123456;
    ;Heiner;;234567;
    Müller;;Mueller@zuHause.de;;
    Maier;Susanne;;456789

    ;;;;;;;;;;;;;;

     

    PS C:> $abc = @(import-csv -path C:\temp\Test.csv  -Header "Nachname","Vorname","Email","PersonalNummer"  -Delimiter ";"| Select-Object -skip 5)
    
    PS C:> $abc
    
    PS C:> $abc[1]
    
    PS C:> $abc[1].Vorname
    
    PS C:> 

     

  15. Hallo zusammen,

    ich habe es jetzt mit dieser Zeile hinbekommen

    $abc = @(import-csv -path C:\temp\Test.csv  -Header 'Nachname;Vorname;Email;PersonalNummer' | Select-Object -skip 5)
    $abc = @(import-csv -path C:\temp\Test.csv  -Header "Nachname","Vorname","Email","PersonalNummer" -delimiter ";" | Select-Object -skip 5)

    vielen Dank für Eure Hilfe.

    Allerdings habe ich noch ein Phänomen, bei dem ich bitte nochmal Eure Hilfe bräuchte:

    Sobald das ERSTE ZEICHEN einer Zeile in der csv-Datei, die eingelesen wird, ein Anführungszeichen  "  ist, funktioniert das Ganze nicht mehr?!

    Wie kann ich das denn "reparieren" (ich habe leider in meiner einzulesenden CSV in 2 Zeilen jeweils ein " als erstes Zeichen stehen)

     

    Danke nochmal 

    Holger

    sorry, ich wollte die Code-Zeile nicht doppelt posten....

  16. vor 18 Minuten schrieb BOfH_666:

     

    OK.... also prinzipiell bin ich absolut bei Nils. Wir haben hier schon öfters an Lösung von hinten durch die Brust ins Auge gebaut, die aber für die eigentlich zu lösende Aufgabe völlig unnötig waren.

     

    Davon unabhängig:

     

    Du kannst Dir doch das ganze Geraffel sparen, wenn Du die aus Deiner Excel-Datei erzeugte CSV-Datei, die ja keine Header hat, ganz normal mit Import-CSV einliest, dabei mit dem Parameter -Header, die gewünschten Header dazupackst und mit einem Select-Object -Skip 5, die ersten 5 Zeilen auslässt.

    ...grundsätzlich ne gute Idee, hätte ich auch selber drauf kommen können :-) Aber so richtig funktionieren tut das auch nicht

    $abc = @(import-csv -path C:\temp\Test.csv  -Header 'Nachname;Vorname;Email;PersonalNummer' | Select-Object -skip 5)

    ein 

    $abc

    bringt dann auch das gewünschte Ergebnis:

    Nachname;Vorname;Email;PersonalNummer    
    -------------------------------------    
    Schmitz;Harald;Schmitz@zuHause.de;123456;
    ;Heiner;;234567;                         
    Müller;;Mueller@zuHause.de;;             
    Maier;Susanne;;456789                    
    ;;;;;;;;;;;;;;                           
    Müller;;Mueller@zuHause.de;;  

    auch ein 

    $abc[2]

    bringt das gewünschte Ergebnis

    Nachname;Vorname;Email;PersonalNummer
    -------------------------------------
    Müller;;Mueller@zuHause.de;; 

    allerdings liefert ein

    $abc[2].Email

    kein Ergebnis ?!

    Was mache ich denn hier falsch?

  17. vor 10 Minuten schrieb NilsK:

    Moin,

     

    aha, es handelt sich also um eine wiederkehrende Aufgabe mit wechselnden Daten? Was geschieht damit, d.h. in welcher Art verarbeitest du das weiter?

    Bekommst du die CSVs direkt oder erzeugst du die selbst? Falls du die CSVs bekommst, könntest du auch die Excels direkt erhalten?

     

    Hintergrund der Fragen: Wenn wir wissen, welche Aufgabe du eigentlich lösen musst, können wir dir vielleicht besser helfen. Wir erleben immer wieder, dass wir ein Detailproblem mit jemandem lösen und hinterher feststellen, dass es viel leichter wäre, die tatsächliche Aufgabe ganz anders anzugehen.

     

    Gruß, Nils

     

    Hi Nils,

    ja, ich könnte auch die Excel-Datei bekommen. Das ist kein Problem.

    Was ich damit weiter vorhabe ist nicht ganz einfach zu erklären und da werde ich wohl auch noch lange dran sitzen, bis ich das hinbekomme.

    Im Endeffekt muss ich die Daten, die in der Excel geliefert werden herausfiltern und damit existierende Benutzer-Daten auf einem Oracle-LDAP-Server updaten.

    Sprich: Benutzer x soll ein bestimmtes Flag auf dem LDAP Server gesetzt bekommen. Das mache ich bisher alles "zu Fuß". Es kommt aber vor, dass Excel-Tabellen mit 60 oder mehr Benutzern reinkommen, bei denen manuell unterschiedliche Flags gesetzt werden müssen, oder diese in unterschiedlioche Gruppen aufgenommen werden müssen.....

    Das möchte ich so weit automatisieren, wie es mir möglich ist....

     

    Lange Rede, kurzer Sinn: Es wäre mir tatsächlich schon mega geholfen, wenn Ihr mir bei meinem ursprünglichen Problem helfen könntet.... Es werden bestimmt beim Entwickeln noch genug andere Probleme auftauchen, die ich ich jetzt noch nicht absehen kann :-)

     

    Danke und Gruß

    Holger 

  18. vor einer Stunde schrieb NilsK:

    Moin,

     

    stellen wir das Ganze doch mal auf die Füße: Was hast du denn insgesamt vor? 

     

    Gruß, Nils

     

    Hi Nils,

    Ich habe immer wieder Excel-Dateien, die den gleichen Aufbau haben. Nur eben unterschiedlich mit Namen, Mail-Adresse, etc... befüllt. Diese werden mir als csv-Datei abgespeichert zur Verfügung gestellt. Hier sind halt die ersten paar Zeilen immer Datenmüll. Ich möchte die Zeilen, die die Benutzer-Informationen (in der csv immer ab Zeile 6) also weiterverarbeiten. Dazu möchte ich diese in einem mehrdimensionalen Array haben, damit ich ich für jeden Benutzer die einzelnen Daten explizit ansprechen kann (z.b. Mailadresse von Benutzer aus Zeile 7 => $ergebnis[2].Email)

     

    Quasi genau so, wie ich es habe, wenn ich den Zwischenschritt mit der zweiten csv Datei, die ich abspecihere und wieder einlese, habe.

    Halt nur, ohne den Umweg eine neue Datei abzulegen und wieder einzulesen....

     

    Danke und Gruß

    Holger

     

    vor 52 Minuten schrieb BOfH_666:

    Es gibt ein Modul, mit dem Du Excel-Dateien direkt verarbeiten kannst: ImportExcel. Das macht die Sache eventuell leichter.

     

    Dafür gibt es beim cmdlet Import-Csv den Parameter -Header, mit dem man eigene Header hinzufügen kann.

     

    Ja ... quasi oben alles beantwortet ...   ;-)

     

    Ach übrigens, wenn Du Code postest, diesen am Besten auch als Code formatieren (das ist der Button "</>" oben im Editor) 

    Hallo BOfH_666,

     

    danke für Deine Antwort. Das ImportExcel-Modul schaue ich mir einmal genauer an. Dankefür den Tipp!

     

    Allerdings bringt mir das cmdlet Import-Csv nicht so viel. Ich habe ja eine Variable ($xyz) in die ich meinen selbstgebauten Header und die nötigen "Daten-Zeilen" aus der ursprünglichen csv Datei gelegt habe....... 

    Ich bekomme es aber nicht hin, diese Variable als Array zu benutzen. Ich muss zuerst den Inhalt der Variable in eine Datei abspecihern und DANN mit import-csv diese neue Datei wieder einlesen (der Inhalt der abgespeciherten csv Datei ist ja genauso, wie ich es brauche..... nur bekomme ich diesen halt nicht in ein Array)

     

    Danke und Gruß

    Holger

×
×
  • Neu erstellen...