none
Vergleich von Datensätzen

    Frage

  • Hallo zusammen,

    ich habe ein Skript gebaut, mit dem Änderungen an Sicherheitsgruppen überwacht werden sollen. Dabei wird der letzte Stand aus einer .csv Datei ausgelesen und mit den aktuellen Daten aus dem AD verglichen.

    Da ich vorerst nur einige wenige Gruppen damit überprüft habe, gestaltete ich die Abfragen einzeln. Das nachfolgende Skript lief bei mir bisher einwandfrei:

    ## Speicherort der Datei
    $file = "C:\Temp\Admins.csv"
    
    ## Deklarieren des E-Mail Empfängers
    $xemail = "meine-email@mail.de"
    
    ## Deklarieren des E-Mail Absenders
    $xabsender = "PowerShell@mailserver.local"
    
    ## Deklarieren des E-Mail Betreffs
    $xbetreff = "Administratoren - Accounts"
    
    ## Deklarieren des SMTP-Servers
    $xsmtp = "smtp.server.local"
    
    ## Gruppen, die Überwacht werden sollen
    
    If (!(Test-Path $file)) {
        # Alter Stand nicht vorhanden
        $OldAdministratoren = @()
        $OldDomainAdmins = @()
        $OldSchemaAdmins = @()
        $OldEnterpriseAdmins = @()
        $OldAccountOperators = @()
    
    } else {
        # Alter Stand vorhanden
        $OldAdministratoren = Import-Csv -Path $file -Delimiter ';' | ?{$_.group -eq 'Administrators'} | ?{$_.change -ne 'removed'}
        $OldDomainAdmins = Import-Csv -Path $file -Delimiter ';' | ?{$_.group -eq 'Domain Admins'} | ?{$_.change -ne 'removed'}
        $OldSchemaAdmins = Import-Csv -Path $file -Delimiter ';' | ?{$_.group -eq 'Schema Admins'} | ?{$_.change -ne 'removed'}
        $OldEnterpriseAdmins = Import-Csv -Path $file -Delimiter ';' | ?{$_.group -eq 'Enterprise Admins'} | ?{$_.change -ne 'removed'}
        $OldAccountOperators = Import-Csv -Path $file -Delimiter ';' | ?{$_.group -eq 'Account Operators'} | ?{$_.change -ne 'removed'}
           }
    
    ## Lese derzeitige Administratoren aus
    $CurrentAdministratoren = @(Get-ADGroupMember -Identity 'Administrators' | select @{N='Anmeldename';e={$_.SamAccountName}}, Name, @{n='Group';e={'Administrators'}})
    $CurrentDomainAdmins = @(Get-ADGroupMember -Identity 'Domain Admins' | select @{N='Anmeldename';e={$_.SamAccountName}}, Name, @{n='Group';e={'Domain Admins'}})
    $CurrentSchemaAdmins = @(Get-ADGroupMember -Identity 'Schema Admins' | select @{N='Anmeldename';e={$_.SamAccountName}}, Name, @{n='Group';e={'Schema Admins'}})
    $CurrentEnterpriseAdmins = @(Get-ADGroupMember -Identity 'Enterprise Admins' | select @{N='Anmeldename';e={$_.SamAccountName}}, Name, @{n='Group';e={'Enterprise Admins'}})
    $CurrentAccountOperators = @(Get-ADGroupMember -Identity 'Account Operators' | select @{N='Anmeldename';e={$_.SamAccountName}}, Name, @{n='Group';e={'Account Operators'}})
    
    ## Vergleiche neue mit den alten Daten
    $send = 0
    
    $AdminResult = @(Compare-Object -ReferenceObject $OldAdministratoren -DifferenceObject $CurrentAdministratoren -Property Anmeldename -PassThru -IncludeEqual)
    $HashVar = @(Compare-Object -ReferenceObject $OldAdministratoren -DifferenceObject $CurrentAdministratoren).Length -eq 0
    IF(!$HashVar){$send = 1}
    $DomainAdminResult = @(Compare-Object -ReferenceObject $OldDomainAdmins -DifferenceObject $CurrentDomainAdmins -Property Anmeldename -PassThru -IncludeEqual)
    $HashVar = @(Compare-Object -ReferenceObject $OldDomainAdmins -DifferenceObject $CurrentDomainAdmins).Length -eq 0
    IF(!$HashVar){$send = 1}
    $SchemaAdminsResult = @(Compare-Object -ReferenceObject $OldSchemaAdmins -DifferenceObject $CurrentSchemaAdmins -Property Anmeldename -PassThru -IncludeEqual)
    $HashVar = @(Compare-Object -ReferenceObject $OldSchemaAdmins -DifferenceObject $CurrentSchemaAdmins).Length -eq 0
    IF(!$HashVar){$send = 1}
    $EnterpriseAdminsResult = @(Compare-Object -ReferenceObject $OldEnterpriseAdmins -DifferenceObject $CurrentEnterpriseAdmins -Property Anmeldename -PassThru -IncludeEqual)
    $HashVar = @(Compare-Object -ReferenceObject $OldEnterpriseAdmins -DifferenceObject $CurrentEnterpriseAdmins).Length -eq 0
    IF(!$HashVar){$send = 1}
    $AccountOperatorsResult = @(Compare-Object -ReferenceObject $OldAccountOperators -DifferenceObject $CurrentAccountOperators -Property Anmeldename -PassThru -IncludeEqual)
    $HashVar = @(Compare-Object -ReferenceObject $OldAccountOperators -DifferenceObject $CurrentAccountOperators).Length -eq 0
    IF(!$HashVar){$send = 1}
    
    ## Umbenennung der SideIdicator
    $AdminResult2 = @($AdminResult | ?{$_.SideIndicator -eq '<='} | Select Anmeldename, Name, Group, @{n='change';e={'removed'}})
    $AdminResult2 += @($AdminResult | ?{$_.SideIndicator -eq '=>'} | Select Anmeldename, Name, Group, @{n='change';e={'added'}})
    $AdminResult2 += @($AdminResult | ?{$_.SideIndicator -eq '=='} | Select Anmeldename, Name, Group, @{n='change';e={''}})
    $DomainAdminResult2 = @($DomainAdminResult | ?{$_.SideIndicator -eq '<='} | Select Anmeldename, Name, Group, @{n='change';e={'removed'}})
    $DomainAdminResult2 += @($DomainAdminResult | ?{$_.SideIndicator -eq '=>'} | Select Anmeldename, Name, Group, @{n='change';e={'added'}})
    $DomainAdminResult2 += @($DomainAdminResult | ?{$_.SideIndicator -eq '=='} | Select Anmeldename, Name, Group, @{n='change';e={''}})
    $SchemaAdminsResult2 = @($SchemaAdminsResult | ?{$_.SideIndicator -eq '<='} | Select Anmeldename, Name, Group, @{n='change';e={'removed'}})
    $SchemaAdminsResult2 += @($SchemaAdminsResult | ?{$_.SideIndicator -eq '=>'} | Select Anmeldename, Name, Group, @{n='change';e={'added'}})
    $SchemaAdminsResult2 += @($SchemaAdminsResult | ?{$_.SideIndicator -eq '=='} | Select Anmeldename, Name, Group, @{n='change';e={''}})
    $EnterpriseAdminsResult2 = @($EnterpriseAdminsResult | ?{$_.SideIndicator -eq '<='} | Select Anmeldename, Name, Group, @{n='change';e={'removed'}})
    $EnterpriseAdminsResult2 += @($EnterpriseAdminsResult | ?{$_.SideIndicator -eq '=>'} | Select Anmeldename, Name, Group, @{n='change';e={'added'}})
    $EnterpriseAdminsResult2 += @($EnterpriseAdminsResult | ?{$_.SideIndicator -eq '=='} | Select Anmeldename, Name, Group, @{n='change';e={''}})
    $AccountOperatorsResult2 = @($AccountOperatorsResult | ?{$_.SideIndicator -eq '<='} | Select Anmeldename, Name, Group, @{n='change';e={'removed'}})
    $AccountOperatorsResult2 += @($AccountOperatorsResult | ?{$_.SideIndicator -eq '=>'} | Select Anmeldename, Name, Group, @{n='change';e={'added'}})
    $AccountOperatorsResult2 += @($AccountOperatorsResult | ?{$_.SideIndicator -eq '=='} | Select Anmeldename, Name, Group, @{n='change';e={''}})
    
    ## Zusammenfügen der Administratoren
    $AllCurrentAdmins = $AdminResult2 + $DomainAdminResult2 + $SchemaAdminsResult2 + $EnterpriseAdminsResult2 + $AccountOperatorsResult2
    
    $AllCurrentAdmins
    If ($AllCurrentAdmins -eq $Null) {
        
        Exit 0
    } else {
        
        $AllCurrentAdmins | Export-Csv -path $file -Encoding UTF8 -Delimiter ';' -NoTypeInformation
        
        ## Deklarieren des E-Mail Inhalts
        $xinhalt = "`nHallo,`n`n"
        $xinhalt += "Diese automatische E-Mail informiert Sie ueber die aktuellen Administratoren.`n`n"
    
        ## Versenden der E-Mail
        IF($send -eq 1){
             #Send-MailMessage -to $xemail -from $xabsender -Subject $xbetreff -body $xinhalt -Attachments $file -SmtpServer $xsmtp
             Write-Host "E-Mail wird über den SMTP Server $xsmtp versendet an $xemail von $xabsender mit dem Betreff $xbetreff und folgendem Inhalt: $xinhalt"
             }
    }
    

    Da ich nun deutlich mehr Gruppen überwachen will, habe ich das Skript mit einem Array neu aufgebaut. Dieses scheitert allerdings immer bei dem Vergleich der Datensätze und ich finde irgendwie keine Lösung dafür. Dies ist das neue Skript:

    ## Speicherort der Datei
    $file = "C:\Temp\Admins.csv"
    
    ## Deklarieren des E-Mail Empfängers
    $xemail = "meine-email@mail.de"
    
    ## Deklarieren des E-Mail Absenders
    $xabsender = "PowerShell@mailserver.local"
    
    ## Deklarieren des E-Mail Betreffs
    $xbetreff = "Administratoren - Accounts"
    
    ## Deklarieren des SMTP-Servers
    $xsmtp = "smtp.server.local"
    
    ## Gruppen, die Überwacht werden sollen
    $localadmins = @("Domain Admins","Administrators","Schema Admins","Enterprise Admins","Account Operators","DHCP Administrators","DnsAdmins","Network Configuration Operators",`
    "Cryptographic Operators","Print Operators","Server Operators","Cert Publishers","DnsUpdateProxy","IIS_IUSRS","Incoming Forest Trust Builders")
    
    
    If (!(Test-Path $file)) {
        # Alter Stand nicht vorhanden
    
        foreach($eintrag in $localadmins){
                                          Set-Variable -Name "Old$eintrag" -Value @() -ErrorAction Ignore
                                          }
        Write-Host "`n`nKeine Referenzdaten gefunden!`n`n" -ForegroundColor Magenta
                             }
    else {
        # Alter Stand vorhanden
        foreach($eintrag in $localadmins){
                                          Set-Variable -Name "Old$eintrag" -Value (Import-Csv -Path $file -Delimiter ';') | ?{$eintrag.group -eq $eintrag} | ?{$eintrag.change -ne 'removed'}
                                          }
          Write-Host "`n`nReferenzdaten wurden importiert!`n`n" -ForegroundColor Green
          }
    
    ## Lese derzeitige Administratoren aus
    Write-Host "`n`nLese derzeitige Administratoren aus:`n`n" -ForegroundColor Cyan
    foreach($eintrag in $localadmins){
                                      Set-Variable -Name "Current$eintrag" -Value (Get-ADGroupMember -Identity $eintrag | select @{N='Anmeldename';e={$_.SamAccountName}}, Name, @{n='Group';e={$eintrag}})
                                      Write-Host $eintrag -ForegroundColor Cyan
                                      }
    
    ## Vergleiche neue mit den alten Daten
    Write-Host "`n`nVergleiche Datensätze:`n`n" -ForegroundColor Yellow
    $send = 0
        foreach($eintrag in $localadmins){
                                          Set-Variable -Name ($eintrag + "Result") -Value (Compare-Object -ReferenceObject ((Get-Variable -Name "Old$eintrag").Value) -DifferenceObject ((Get-Variable -Name "Current$eintrag").Value) -Property Anmeldename -PassThru -IncludeEqual)
                                          $HashVar = (Compare-Object -ReferenceObject ((Get-Variable -Name "Old$eintrag").Value) -DifferenceObject ((Get-Variable -Name "Current$eintrag").Value)).Length -eq 0
                                          IF(!$HashVar){$send = 1}
                                          }
    ## Umbenennung der SideIdicator
    
    $tmpres = @()
    Write-Host "`n`nAnpassung der Überschriften:`n`n" -ForegroundColor Yellow
    foreach($eintrag in $localadmins){
                                      $tmpres = @((Get-Variable ($eintrag+"Result") -ValueOnly) | ?{$_.SideIndicator -eq '<='} | Select Anmeldename, Name, Group, @{n='change';e={'removed'}})
                                      $tmpres += @((Get-Variable ($eintrag+"Result") -ValueOnly) | ?{$_.SideIndicator -eq '=>'} | Select Anmeldename, Name, Group, @{n='change';e={'added'}})
                                      $tmpres += @((Get-Variable ($eintrag+"Result") -ValueOnly) | ?{$_.SideIndicator -eq '=='} | Select Anmeldename, Name, Group, @{n='change';e={''}})
                                      Set-Variable -Name ($eintrag + "Result2") -Value @($tmpres)
                                      }
    
    ## Zusammenfügen der Administratoren
    Write-Host "`n`nZusammenfügen der Ergebnisse:`n`n" -ForegroundColor Cyan
    $AllCurrentAdmins = @()
    foreach($eintrag in $localadmins){
                                      foreach($zeile in (Get-Variable ($eintrag+"Result2") -ValueOnly)){
                                                                                                        $AllCurrentAdmins += $zeile
                                                                                                        }
                                      }
    
    $AllCurrentAdmins
    If ($AllCurrentAdmins -eq $Null) {
       
        Exit 0
    } else {
        
        $AllCurrentAdmins | Export-Csv -path $file -Encoding UTF8 -Delimiter ';' -NoTypeInformation
        
        ## Deklarieren des E-Mail Inhalts
        $xinhalt = "`nHallo,`n`n"
        $xinhalt += "Diese automatische E-Mail informiert Sie ueber die aktuellen Administratoren.`n`n"
    
        ## Versenden der E-Mail
        IF($send -eq 1){
             #Send-MailMessage -to $xemail -from $xabsender -Subject $xbetreff -body $xinhalt -Attachments $file -SmtpServer $xsmtp
             Write-Host "E-Mail wird über den SMTP Server $xsmtp versendet an $xemail von $xabsender mit dem Betreff $xbetreff und folgendem Inhalt: $xinhalt"
             }
    }
    
    
    Ich habe wahrscheinlich schon einen Tunnelblick, da ich seit Tagen daran sitze. Könnt Ihr mir bitte helfen?

    Dienstag, 13. Februar 2018 08:17

Antworten

  • Ich habe mir PowerShell auch rein autodidaktisch mittels Probieren beigebracht. Es ist wichtig, dass du dir erst einmal kleine Aufgaben stellst, an denen du die Basistechniken lernst. Außerdem solltest du zeilenweise vorgehen. Du kannst Code markieren und mit F8 ausführen. Mach das mit jeder neuen Zeilen und prüfe, ob sie dir zurückgibt, was du von ihr erwartest.

    Du solltest überhaupt keine Variablen mit variablem Namen verwenden. Diese verursachen nicht deinen Fehler, aber die umständlichen Befehle überlagern das Problem und man kann es nicht mehr sehen.

    Statt einer Variablen mit dem Namen "Ergebnis$Irgendwas" solltest du eine Hashtabelle verwenden:

    $Ergebnis = @{}

    $Ergebnis[$Irgendwas] = ...

    Die eigentliche Variable $Ergebnis ist damit fest benannt. Somit kannst du von überall sicher darauf zugreifen und brauchst keine umständlichen Get-... und Set-...Cmdlets.
    Mittwoch, 14. Februar 2018 09:19

Alle Antworten

  • Auch auf die Gefahr hin unwillig oder unhöflich zu erscheinen, aber es ist nicht Sinn und Zweck dieses Forums, hier seine Scripte von jemandem debuggen zu lassen. Dafür nehmen wir im richtigen Leben Geld.  ;-)

    Wenn Du Dein Script so zerlegst, dass Du den relevanten (möglichst kurzen) Teil hier posten kannst, mit dem Du ein Problem hast, können wir Dir vermutlich schnell helfen. Vielleicht fällt Dir dann sogar selbst auf, was das Problem sein könnte.


    Best regards,

    (79,108,97,102|%{[char]$_})-join''



    • Bearbeitet BOfH_666 Montag, 19. Februar 2018 12:33
    Dienstag, 13. Februar 2018 08:43
  • Ich verstehe, was Du mir sagen willst, aber wenn ich wüsste wo das Problem liegt, würde ich ja nicht hier schreiben. ;-)

    Für mich ergibt es keinen Sinn, daß der Vergleich der Datensätze in dem ersten Skript einwandfrei funktioniert, im zweiten allerdings nicht. Der fehler könnte eventuell in dem Vergleich selbst liegen:

    $send = 0
        foreach($eintrag in $localadmins){
                                          Set-Variable -Name ($eintrag + "Result") -Value (Compare-Object -ReferenceObject ((Get-Variable -Name "Old$eintrag").Value) -DifferenceObject ((Get-Variable -Name "Current$eintrag").Value) -Property Anmeldename -PassThru -IncludeEqual)
                                          $HashVar = (Compare-Object -ReferenceObject ((Get-Variable -Name "Old$eintrag").Value) -DifferenceObject ((Get-Variable -Name "Current$eintrag").Value)).Length -eq 0
                                          IF(!$HashVar){$send = 1}
                                          }
    Wenn ihr mir helfen könnt, wäre das eine schöne Sache, andernfalls werde ich halt den Array entfernen und alle Gruppen manuell abfragen wie in Skript 1.

    Dienstag, 13. Februar 2018 08:57
  • Dein Stil ist insgesamt etwas konfus. Ich würde zwingend darauf verzichten, Variablennamen zur Laufzeit zu deklarieren, d.h. kein Get-Variable und Set-Variable verwenden. Für so etwas benutzt man Hashtabellen. Du kannst in PowerShell Objekte beliebig komplex anlegen und ineinander schachteln.

    Dienstag, 13. Februar 2018 12:39
  • OK ... ich habe mal was zurechtegebastelt ...  so würde ich jedenfalls anfangen ...
    $Vorher = @'
    Gruppe;Name
    Admins;Paul
    Admins;Heinz
    Admins;Kurt
    Admins;Klaus
    Admins;Max
    SuperAdmins;Johann
    SuperAdmins;Richard
    SuperAdmins;Fred
    SuperAdmins;Fritz
    SuperAdmins;Fridolin
    SuperAdmins;Otto
    '@
    
    $Nachher = @'
    Gruppe;Name
    Admins;Rudi
    Admins;Franz
    Admins;Paul
    Admins;Heinz
    Admins;Kurt
    SuperAdmins;Oskar
    SuperAdmins;Karl
    SuperAdmins;Johann
    SuperAdmins;Richard
    SuperAdmins;Fred
    SuperAdmins;Fritz
    '@
    
    $GruppeVorher = ConvertFrom-Csv -InputObject $Vorher -Delimiter ';'
    $GruppeNachher = ConvertFrom-Csv -InputObject $Nachher -Delimiter ';'
    
    $Gruppen = $GruppeVorher  | Group-Object -Property Gruppe | Select-Object -Property Name
    $Gruppen | 
        ForEach-Object {
            $Gruppe = $_
            $MitgliederVorher = $GruppeVorher | Where-Object {$_.Gruppe -eq $Gruppe.Name}
            $MitgliederNachher = $GruppeNachher | Where-Object {$_.Gruppe -eq $Gruppe.Name}
            Compare-Object -ReferenceObject $MitgliederVorher -DifferenceObject $MitgliederNachher -IncludeEqual -Property Name -PassThru |
                Select-Object -Property Gruppe,Name,SideIndicator
        }
    Das Ergebnis sollte dann so aussehen  ... am SideIndicator siehst Du, welche Accounts geblieben sind, welche dazugekommen sind und welche nicht mehr vorhanden sind.
    Gruppe      Name     SideIndicator
    ------      ----     -------------
    Admins      Paul     ==
    Admins      Heinz    ==
    Admins      Kurt     ==
    Admins      Rudi     =>
    Admins      Franz    =>
    Admins      Klaus    <=
    Admins      Max      <=
    SuperAdmins Johann   ==
    SuperAdmins Richard  ==
    SuperAdmins Fred     ==
    SuperAdmins Fritz    ==
    SuperAdmins Oskar    =>
    SuperAdmins Karl     =>
    SuperAdmins Fridolin <=
    SuperAdmins Otto     <=
    Das kannst Du dann natürlich nach Belieben weiterverarbeiten ...  ;-)


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    Dienstag, 13. Februar 2018 13:33
  • Ich habe es nie richtig gelernt. Kannst du mir bitte erklären, wie ich Variablen deklariere, die einen variablen Namen haben? Bisher wusste ich nur von der Möglichkeit über Set-Variable / Get-Variable. Ich werde es mal auf Hashtable umstellen und schauen, ob dadurch der Fehler behoben wird.

    Ist das die Ursache für den fehlerhaften Vergleich der Datensätze?

    Dienstag, 13. Februar 2018 13:36
  • Ich habe es nie richtig gelernt.

    Dann nimm Dir doch bitte ein wenig Zeit und schaff Dir wenigsntes die Grundlagen drauf. Es gibt zahlreiche kostenlose Angebote im Netz, die Dir einen strukturierten Einstieg bieten. Nicht zuletzt direkt von Microsoft:

    Getting Start with Microsoft Powershell

    !! Seh empfehlenswert !!  ;-)


    Best regards,

    (79,108,97,102|%{[char]$_})-join''

    Dienstag, 13. Februar 2018 14:16
  • Ich habe mir PowerShell auch rein autodidaktisch mittels Probieren beigebracht. Es ist wichtig, dass du dir erst einmal kleine Aufgaben stellst, an denen du die Basistechniken lernst. Außerdem solltest du zeilenweise vorgehen. Du kannst Code markieren und mit F8 ausführen. Mach das mit jeder neuen Zeilen und prüfe, ob sie dir zurückgibt, was du von ihr erwartest.

    Du solltest überhaupt keine Variablen mit variablem Namen verwenden. Diese verursachen nicht deinen Fehler, aber die umständlichen Befehle überlagern das Problem und man kann es nicht mehr sehen.

    Statt einer Variablen mit dem Namen "Ergebnis$Irgendwas" solltest du eine Hashtabelle verwenden:

    $Ergebnis = @{}

    $Ergebnis[$Irgendwas] = ...

    Die eigentliche Variable $Ergebnis ist damit fest benannt. Somit kannst du von überall sicher darauf zugreifen und brauchst keine umständlichen Get-... und Set-...Cmdlets.
    Mittwoch, 14. Februar 2018 09:19
  • Hallo,

    ich habe das Skript entsprechend angepasst. Beispiel:

    $localadmins = @(#diverse Einträge#)

    $CurrentEintrag = @() $nr = 0 foreach($eintrag in $localadmins){ $CurrentEintrag[$nr] = @(Get-ADGroupMember -Identity $eintrag | select @{N='Anmeldename';e={$_.SamAccountName}}, Name, @{n='Group';e={$eintrag}}) $nr ++ }

    Leider erhalte ich allerdings die folgende Fehlermeldung:

    Index was outside the bounds of the array.
    At line:4 char:60
    + ... ag[$nr] = @(Get-ADGroupMember -Identity $eintrag | select @{N='Anmeld ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], IndexOutOfRangeException
        + FullyQualifiedErrorId : System.IndexOutOfRangeException

    Was mache ich falsch?

    Mittwoch, 14. Februar 2018 17:16
  • Ich habe den Eindruck, dass Du Dich immer weiter von dem entfernst, was Du eigentlich machen willst. Hast Du Dir mein Beispiel-Code hier unten mal angesehen? Wenn ich Deine Aufgabenstellung richtig verstanden habe, macht der Code genau das was Du möchtest. Er vergleicht die Namen, die in einer Gruppe vorhanden sind und zeigt auf, welche gleich geblieben sind, welche dazugekommen sind und welche weggefallen sind. Das war's doch was Du wolltest, oder?

    Und nochmal meine Empfehlung: Nimm Dir die Zeit, Dir die Grundlagen von Powershell anzueignen!


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH_666 Mittwoch, 14. Februar 2018 18:39
    Mittwoch, 14. Februar 2018 18:38
  • wenn es nicht unbedingt PS sein muss, könntest du dir auch noch das Audit vom Server ansehen. Hier kannst du auch einstellen, dass Änderungen an bestimmten Objekte im Eventlog aufgezeichnet werden.


    Chris

    Mittwoch, 14. Februar 2018 20:25
  • Nur um den Detailfehler noch aufzulösen: @() ist ein Array. @{} ist eine Hashtabelle. Du hast @() genommen und es wie eine Hastabelle verwendet, was natürlich einen Fehler erzeugt.
    Donnerstag, 15. Februar 2018 06:46
  • Ich nutze keine statischen Daten im Array, sondern dynamische Daten aus dem AD, somit ist Dein Vorschlag leider etwas am Thema vorbei. Der Vergleich von Datensätzen hat in meinem ersten Skript bereits funktioniert, nur das Handling ist meines Erachtens nicht so schön, daher wollte ich es ja über eine Array/Foreach Funktion ersetzen.

    Dennoch danke für den Versuch.

    Montag, 19. Februar 2018 10:50
  • Gut zu wissen, danke.
    Montag, 19. Februar 2018 10:53
  • Und was passiert, wenn du in deinem obigen Beispiel

    $CurrentEintrag = @{}

    ersetzt?

    Wer spricht denn von statischen Daten im Array? 

    Montag, 19. Februar 2018 11:38
  • Das war die Antwort auf BOfH_666 vom Dienstag, 13. Februar 2018 13:33

    Leider hat das Forum die nicht darunter gesetzt.

    Montag, 19. Februar 2018 12:11
  • DAS IST EIN BEISPIEL wie man den Vergleich auf die Powershell-Art machen kann. Ohne Schleifen-Kram. Wie Du die Array für den Vergleich zusammenbaust ist doch Deine Sache.

    Ich bin raus. Ich habe keine Lust mehr.

    Tschüß



    Best regards,

    (79,108,97,102|%{[char]$_})-join''

    Montag, 19. Februar 2018 12:17
  • Du bist ein armseliges Würstchen. Nur weil Du nicht verstehst, wie Powershell eigentlich funktioniert, bockst Du wie ein kleines Kind und machst hier alberne Spielchen mit den Antwort-Markierungen. Dieses Forum hier ist für Erwachsene - benimm Dich doch bitte auch so!

    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH_666 Donnerstag, 22. Februar 2018 01:03
    Mittwoch, 21. Februar 2018 23:54