Jump to content

Kuddel071089

Members
  • Gesamte Inhalte

    559
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Kuddel071089

  1. Wenn ich es richtig sehe sind "Get-WUHistory" und "Get-WURebootstatus" keine CmdLets, sondern einfache Skripte.

     

    Wie sieht der Aufruf via Invoke-Command aus? Und wie die Fehlermeldung?

     

    Ich scheitere leider schon an der Remote-Anmeldung.

     

    Zum test wollte ich den Befehl "Get-Host" remote ausführen.

     

    Sprich:

    Invoke-Command -ComputerName Test-Server -ScriptBlock {get-host} -Credential Administrator
    

    Im Credential Popup versuche ich es dann mit:

    User: Test-Server\Administrator
    PW: xxxxx

    Fehlermeldung:

    [Test-Server] Beim Verbinden mit dem Remoteserver "Test-Server" ist folgender Fehler aufgetreten: Die Anforderung kann von WinRM nicht verarbeitet werden. Bei Verwendung der
    
    Kerberos-Authentifizierung ist der folgende Fehler mit Fehlercode 0x80090311  aufgetreten: Es sind momentan keine Anmeldeserver zum Verarbeiten der Anmeldeanforderung
    
    verfügbar.  
    
    . Mögliche Ursachen:
    
      - Der angegebene Benutzername oder das angegebene Kennwort ist ungültig.
    
      - Kerberos wird verwendet, wenn keine Authentifizierungsmethode und kein Benutzername angegeben werden.
    
      - Kerberos akzeptiert Domänenbenutzernamen, aber keine lokale Benutzernamen.
    
      - Der Dienstprinzipalname (Service Principal Name, SPN) für den Remotecomputernamen und -port ist nicht vorhanden.
    
      - Der Clientcomputer und der Remotecomputer befinden sich in unterschiedlichen Domänen, zwischen denen keine Vertrauensbeziehung besteht.
    
     Wenn Sie die oben genannten Ursachen überprüft haben, probieren Sie folgende Aktionen aus:
    
      - Suchen Sie in der Ereignisanzeige nach Ereignissen im Zusammenhang mit der Authentifizierung.
    
      - Ändern Sie die Authentifizierungsmethode; fügen Sie den Zielcomputer der Konfigurationseinstellung "TrustedHosts" für WinRM hinzu, oder verwenden Sie den HTTPS-Transport.
    
     Beachten Sie, dass Computer in der TrustedHosts-Liste möglicherweise nicht authentifiziert sind.
    
      - Führen Sie den folgenden Befehl aus, um weitere Informationen zur WinRM-Konfiguration zu erhalten: "winrm help config". Weitere Informationen finden Sie im Hilfethema
    
    "about_Remote_Troubleshooting".
    
        + CategoryInfo          : OpenError: (Test-Server:String) [], PSRemotingTransportException
    
        + FullyQualifiedErrorId : AuthenticationFailed,PSSessionStateBroken
    
  2. Moin,

     

    schau auch unter "Applikation" sowie bei den Dienstprotokollen unter "Verzeichnisdienst". Wäre komisch, wenn dort nichts auftaucht.

     

    Gruß, Nils

     

    Unter "Active Diretory-Webdienste" habe ich folgede Infomeldung gefunden:

     

     

    Von den Active Directory-Webdiensten konnte kein Serverzertifikat mit dem angegebenen Zertifikatnamen gefunden werden. Für Zertifikate ist die Verwendung von SSL/TLS-Verbindungen erforderlich. Wenn Sie SSL/TLS-Verbindungen verwenden möchten, stellen Sie sicher, dass auf dem Computer ein gültiges Serverauthentifizierungszertifikat von einer vertrauenswürdigen Zertifizierungsstelle installiert ist.
     
     Zertifikatname: xxxxx.xxxx.local
    

     

    Unter Diretory Service habe ich folgende Warnung gefunden:

     

    Während der vergangenen 24 Stunden haben einige Clients versucht, eine der folgenden LDAP-Bindungen vorzunehmen:
    (1) Eine SASL-LDAP-Bindung (Verhandlung, Kerberos, NTLM oder Digest), die keine Signatur (Integritätsüberprüfung) anforderte, oder
    (2) eine einfache LDAP-Bindung über eine Klartextverbindung (ohne SSL-/TLS-Verschlüsselung).
     
    Der Verzeichnisserver ist derzeit nicht zum Zurückweisen derartiger Bindungen konfiguriert. Sie können die Sicherheit dieses Verzeichnisservers deutlich verbessern, indem Sie den Server zum Zurückweisen derartiger Bindungen konfigurieren. Weitere Details und Informationen zum Vornehmen dieser Konfigurationsänderung auf dem Server finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=87923".
     
    Eine Zusammenfassung der Anzahl derartiger Bindungen, die in den vergangenen 24 Stunden eingegangen sind, finden Sie unten.
     
    Sie können die Protokollierung erweitern und bei jeder derartigen Bindung durch einen Client ein Ereignis protokollieren.  Hierzu gehören Informationen dazu, welcher Client die Bindung vornahm. Erhöhen Sie hierzu die Einstellung für die Ereignisprotokollierungskategorie "LDAP-Schnittstellenereignisse" auf Stufe 2 oder höher.
     
    Anzahl der einfachen Bindungen, die ohne SSL/TLS erfolgten: 183
    Anzahl der Verhandlungs-/Kerberos-/NTLM-/Digestbindungen, die ohne Signatur erfolgten: 8
    
     
  3. Moin,

     

    meine erste Frage zielt dahin, ob der Name im DC-Zertifikat auch der tatsächliche Name des DCs ist. Das ging aus deiner Angabe nicht hervor.

     

    Die Frage nach dem Ereignisprotokoll bezieht sich auch auf den neuen DC. Wenn er nicht antwortet, wäre zu vermuten, dass es im Protokoll Fehlermeldungen gibt.

     

    Gruß, Nils

     

    Hallo Nils,

     

    im Zertigikat ider der Name von neuen DC eingetragen. Sprich wurde ausgestellt für ServerXYZ

  4. Probiers mal mit dem Parameter "-Credential"  ;)

    PS: Du darfst dich auch gerne in die CmdLets einlesen. Microsoft stellt für jedes CmdLet eine Dokumentation mit Parameter detailliert online.

     

    Leider gibts es bei den Commandlets "Get-WUHistory" und "Get-WURebootstatus" keinen Parameter Crendential.

     

    Wenn ich es per Invoke-Command machen, funktionieren meine Crendetials nicht mehr.

     

    Das OS konnte ich Remote abfragen

     

    $servers = @("Server1","Server2")
    
    
    
    foreach($server in $servers) {
    #Admin-Credentials
    $adminuser = "$server\Administrator"
    $password = "xxxxxxxxx"
    $secstr = New-Object -TypeName System.Security.SecureString
    $password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
    $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $adminuser, $secstr
     
    $os = Get-WmiObject -class Win32_OperatingSystem -computername $server -Credential $server\$user $pw
    $os = "$($property.Caption)"
    
  5. Hallo zusammen,

     

    wir haben letzte Woche einen DomainController (WinSrv 2012) aus der AD entfernt und einen neuen DC auf WinSrv 2016 hinzugefügt.

     

    Seit dem haben wir Probleme mit LDAP.

     

    Wenn man sich an deren Systemen per LDAP (SSL) authentifizierne möchte, bekommt man ein Fehler, dass die Anmeldung nciht möglich war.

     

    Klickt man noch einmal auf anmelden funktioniert alles.

     

    Ich hab derzeit leider keine Idee wo ich ansetzten soll.

     

    DC1: WinSrv 2012

    DC2: WinRsv 2016

    DC3: WinSrv 2012

     

    Alle Systeme, die LDAP nutzen, haben den Domänen-Namen als LDAP-Server eingetragen.

     

    Vielen Dank schon einmal für die Hilfe

  6. Ich habe die Abfrage jetzt übrigens hinbekommen.

     

    Für alle AD Server bekomme ich alle Infos super ausgelesen.

     

    Leider haben wir auch noch Server, die nicht Mitlgied in der AD sind (historisch bedingt / Novell eDir bis 2014).

     

    Wie kann ich jetzt von diesen Server die Infos abfragen ?

     

    Gestartet wird das Skript auf einem AD-Mitgliedsserver mit deinem AD-Admin-Account.

     

    Ich müsste also bei den anderen Servern den lokalen Administrator verwenden (hat bei allen Servern das gleiche PW).

     

    Leider stehe ich gerade voll auf dem Schlauch

  7. Danke für den Tip. Habe es jetzt umgestellt.

    cls
    
    $servers = @("testserver2")
    
    
    
    foreach($server in $servers) {
    #Check ob das Modul auf dem Server installiert ist. Ansonsten wird es kopiert
    IF(!(Test-Path "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\*")) {copy-item "\\testserver1\D$\PSWindowsUpdate" -Recurse "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules"}
    
    
    Invoke-Command -ComputerName $server -ScriptBlock {Import-Module PSWindowsUpdate}
     
    #Invoke-Command -ComputerName $server -ScriptBlock {$wuabfrage = Get-WUHistory | Select-Object -first 1}
    $wuabfrage = Invoke-Command -ComputerName $server -ScriptBlock {Get-WUHistory | Select-Object -first 1}
    
    
    #Check, ob ein Reboot nötig ist
    $reboot = Invoke-Command -ComputerName $server -ScriptBlock {Get-WURebootStatus}
    #Entfernung von "localhost: " aus der Varaible
    $reboot = $reboot -replace "localhost: ", ""
    
    #Abfrage des Betriebssystems
    $serverinfos = Get-ADComputer $server -Properties * | Select operatingsystem
    
    #Output
    "|$($wuabfrage.ComputerName)|$($wuabfrage.Date)|$reboot|$($serverinfos.operatingsystem))|"
    }

    Leider bekomme ich jetzt beim Befehl "Get-WURebootStatus" einen Fehler

     

    Eine Instanz der COM-Komponente mit der CLSID {C01B9BA0-BEA7-41BA-B604-D0A36F469133} konnte aufgrund des folgenden Fehlers nicht von der IClassFactory erstellt werden:
    80070005 Zugriff verweigert (Ausnahme von HRESULT: 0x80070005 (E_ACCESSDENIED)).
        + CategoryInfo          : NotSpecified: ( :) [New-Object], UnauthorizedAccessException
        + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.NewObjectCommand
        + PSComputerName        : testserver2
    
  8. Hallo zusammen,

     

    ich bin gerade dabei mir einen Update-Report aller unserer WIndows Server zusammenzubauen.

     

    Die Spalten sollen am Ende wir folgt ausgefüllt werden:

    Servername;Datum der letzten Installation;Neustart nötig;Betriebssystem

     

    Für die Update-Infos verwende ich das PS-Modul "PSWIndowsUpdate".

    Da diese ja noch nciht auf jedem Server ist, muss ich es vorher noch verteilen und importieren. Das funktioniert auch.

     

    Leider bekomme ich die Infos aus der Remote-Abfrage nicht weiterverarbeitet.

     

    BIs jetzt habe ich folgendes

    cls
    
    
    
    $servers = @("test-server2")
    
    
    
    foreach($server in $servers) {
    
    #Check ob das Modul auf dem Server installiert ist. Ansonsten wird es kopiert
    
    IF(!(Test-Path "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\*")) {copy-item "\\testserver1\D$\PSWindowsUpdate" -Recurse "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules"}
    
    
    Invoke-Command -ComputerName $server -ScriptBlock {Import-Module PSWindowsUpdate}
    
    Invoke-Command -ComputerName $server -ScriptBlock {$wuabfrage = Get-WUHistory | Select-Object -first 1}
    
    #Check, ob ein Reboot nötig ist
    
    Invoke-Command -ComputerName $server -ScriptBlock {$reboot = Get-WURebootStatus}
    
    #Entfernung von "localhos: " aus der Varaible
    
    $reboot = $reboot -replace "localhost: ", ""
    
    
    
    #Abfrage des Betriebssystems
    
    $serverinfos = Get-ADComputer $server -Properties * | Select operatingsystem
    
    
    
    #Output
    
    "$($wuabfrage.ComputerName);$($wuabfrage.Date);$reboot;$($serverinfos.operatingsystem))"
    
    }
    
    

    Ich hoffe ihr könnt mir weiter helfen.

     

    Vielen Dank schon einmal

  9. Moin,

     

    häng doch einfach in der Ereignisanzeige eine Reaktion an das Event. Dann wirst du immer bei neuem Auftreten informiert.

     

    Gruß, Nils

     

    Hallo NIls,

     

    wusste bis eben gar nicht, dass so was geht ^^. Ja gut, das wäre dann wohl der einfach Weg gewesen :-D

     

    Für die Interessierten, wie ich es umgesetzt habe:

     

     

    cls
    $host.ui.RawUI.WindowTitle = "DC Backup Check v0.2"
    
    #Mailvariablen
    $Mailempfaenger = "xxxx@xxxx.de"
    $smtpserver = "outlook.xxxx.de"
    $absender = "Check@xxxx.de"
    
    
    
    #Server definieren
    $servers = @("DC01","DC02","DC03")
    
    
    #Checkschleife
    foreach($server in $servers) {
    #Datum von gestern in Variable
    $gestern = (Get-Date) - (New-TimeSpan -Day 1)
    
    
    #Check ob das Backup gestartet wurde
    $event_start = Get-WinEvent -LogName Microsoft-Windows-Backup -ComputerName $server | Where-Object {$_.Id -eq 1 -and ($_.TimeCreated -ge $gestern)}
    
    if($event_start) {
    #Check ob das Backup erfolgreich abgeschlossen wurde
    #Event in Variable schreiben
    $event_erfolgreich = Get-WinEvent -LogName Microsoft-Windows-Backup -ComputerName $server | Where-Object {$_.Id -eq 4 -and ($_.TimeCreated -ge $gestern)}
    
    if($event_erfolgreich) {
    
    
    #Klammer vom Check ob das Backup erfolgreich war
    #Erfolgreichmail
    $mailbody = "C:\mailbody_$server.txt"
    "$($event_erfolgreich.TimeCreated)" | Out-File -FilePath $mailbody -Append
    "$($event_erfolgreich.Message)" | Out-File -FilePath $mailbody -Append
    $body = Get-Content -Raw $mailbody
    
    Send-MailMessage -SmtpServer $smtpserver -to $Mailempfaenger -from $absender -Subject "+++ AD DC Backup: $server  -->  SUCCESS +++" -Body $body -Encoding Unicode
    Remove-Item $mailbody
    }
    else {
    #Fehlermeldung, dass das Backup nicht erfolgreich abgeschlossen wurde
    Send-MailMessage -SmtpServer $smtpserver -to $Mailempfaenger -from $absender -Subject "+++ AD DC Backup: $server  -->  ERROR +++" -Body "Das Backup wurde nicht erfolgreich abgeschlossen" -Encoding Unicode
    }
    
    
    
    }#Klammer vom Check ob das Backup gestartet wurde
    
    
    else {
    #Fehlermeldung, dass es keinen Eventlog-Eintrag für den Start des Backups gibt
    Send-MailMessage -SmtpServer $smtpserver -to $Mailempfaenger -from $absender -Subject "+++ AD DC Backup: $server  -->  ERROR +++" -Body "Das Backup wurde nicht ausgeführt" -Encoding Unicode
    }
    
    
    }#Klammer der ForEach Schleife
    
  10. Also die Abfrage der Erfolgreich-Meldungen klappt schonmal:

    Get-WinEvent -LogName Microsoft-Windows-Backup -ComputerName DC2 | Where-Object {$_.Id -eq 4}
    

    Jetzt will ich natürlich in meinem Skript immer nur prüfen ob am gestrigen Tag die Sicherung erfolgreich lief. Leider fuktioniert der Filter nicht:

    Get-WinEvent -LogName Microsoft-Windows-Backup -ComputerName DC2 | Where-Object {$_.Id -eq 4 -and ($_.TimeCreated -like "*14.06.2017*")}
    

    Habe den Fehler gefunden. Ist mal wieder ein Übersetzungsproblem:

     

     

    Get-WinEvent -LogName Microsoft-Windows-Backup -ComputerName DC2 | Where-Object {$_.Id -eq 4 -and ($_.TimeCreated -like "*06/14/2017*")}
    
  11. Hallo zusammen,

     

    wir haben bei unseren DomainControllern gerade die Windows Server Sicherung aktiviert.

     

     

    Jetzt bin ich gerade dabei ein Powershell Skript zu schreiben, welches prüft ob die Sicherungen korrekt liefen.

     

     

    Im Eventlog findet man dazu unter "Anwendungs- und Dienstprotokolle/Microsoft/WIndows/Backup/Betriebsbereit" jeweils einen Eintrag mit der Ereignis-ID 4:

     

    Message: Die Sicherung wurde erfolgreich abgeschlossen.

     

    Diesen Eintrag würde ich jetzt gerne per Powershell abfragen und mir dann eine Mail zukommen lassen.

     

    Leider bekomme ich es nicht hin per "Get-Eventlog" den o.g. Eintrag abzufragen.

     

     

    Hier im Forum gibts es schon ein Thema dazu: http://www.mcseboard.de/topic/173783-powershell-mit-get-eventlog/

     

    Nur da werden Ereignisse mit anderen IDs abgefragt.

     

    Hat jemand einen Tip für mich ?

     

     

    Vielen Dank schon einmal

  12. Moin,

    $Start = Get-Date
    $Duration = New-TimeSpan -Minutes 5
    $End = $Start + $Duration
    Do{
        Start-Sleep -Seconds 1
        $DisplayTime = New-TimeSpan -Start $(Get-Date) -End $End
        $Time = "{0:D2}:{1:D2}" -f ($DisplayTime.Minutes),  ($DisplayTime.Seconds)
        Write-Progress $Time 
    }
    While((Get-date) -lt $End)
    

    Gruß, Nils

     

    Na das sieht doch super aus, vielen Dank :-)

  13.  

    geht alles ... probier ma das hier

    $Start = Get-Date
    $Duration = New-TimeSpan -Minutes 5
    Do{
        Start-Sleep -Seconds 1
        $ElapsedTime = New-TimeSpan -Start $Start -End $(Get-Date)
        $Time = "{0:D2}:{1:D2}" -f $ElapsedTime.Minutes,  $ElapsedTime.Seconds
        Write-Progress $Time 
    }
    While((Get-date) -lt ($Start + $Duration))
    
    

    Geht das ganze auch Rückwärts ? Jetzt wird ja von 0 bis 5 Minuten gezählt.

    Ich hätte aber gern von 5 bis 0 Minuten

  14. Hallo zusammen,

     

    ich habe mir für ein Skript einen Countdwn gebaut, der jewiels ein Anzahl an Sekunden herunterzählt.

     

    Diesen habe ich jetzt auf MInuten umgebaut und würde gerne die letzten Minute wiederum in Sekunden runterzählen.

     

    Klappt nur leider nicht:

    #Wartezeit von 5 Minuten
    $waitMinutes = 5
    $waitMinutes..0 | Foreach-Object {
    cls
    Write-Host "Wartezeit:" -ForegroundColor Yellow -NoNewline
    Write-Host " $_" -ForegroundColor Red -NoNewline
    Write-Host " Minuten" -ForegroundColor Yellow -NoNewline
    Start-Sleep -Seconds 60
    
    if($_ -eq 1) {
    $waitSeconds = 60
    $waitSeconds..0 | Foreach-Object {
    cls
        Write-Host "Wartezeit:" -ForegroundColor Yellow -NoNewline
        Write-Host " $_" -ForegroundColor Red -NoNewline
        Write-Host " Sekunden" -ForegroundColor Yellow -NoNewline
        Start-Sleep -Seconds 1}
    }
    }
    

    Hat jemand eine Idee wo der Fehler ist ?

     

    Am besten wäre natürlich, wenn die Zeit in Minuten und Sekunden heruntergezählt wird:
    Wartezeit 5:45 zb. Aber das ist sicher noch schwerer umsetzbar

     

     

    Danke schon einmal

  15. Hi,

     

    also wenn ich ein Ablaufdatum in der GUI mit 31.03.2017 setze meldet mir die PowerShell mit "Get-ADUser test -Properties * | fl AccountExpirationDate": "AccountExpirationDate : 01.04.2017 00:00:00".

     

    Oder auch auf die Schnelle zusammen geschustert:

    Get-ADUser test -Properties samAccountName, AccountExpirationDate | %{ Set-ADAccountExpiration -Identity $_.samAccountName -DateTime ($_.AccountExpirationDate).AddDays(1) }
    

    Gruß

    Jan

     

    Ja das ist richtig. Ich bekomme das Ablaufdatum aber von einer Website als Variable, die ich per Powershell weiterverarbeite.

     

    Setzt man das Datum dann per Powershell auf 31.03.17, sagt mit die AD-Verwatlungskonsole, dass der User am 30.03.17 abläuft.

     

    Daher muss ich auf das Datum der Variable einen Tag drauf rechnen, nur weiß ich nicht wie

    Was würde ich nur ohne Google machen :-D

    $ablaufdatum_projektuser = "31.03.2017"
    
    $datum = Get-Date $ablaufdatum_projektuser
    $ablaufdatum_projektuser = $datum.AddDays(+1).ToString("dd.MM.yyyy")
    
    $ablaufdatum_projektuser
    
  16. Hallo zusammen,

     

    bei der Einrichtung eines Users wird per GUI Kalender ein Ablaufdatum für externe User gewählt.

     

    Z.B. 31.03.2017.

     

    Wenn das Einrichtungskript jetzt das Ablaufdatum des AD-User setzt, läuft der User am Anfang des Tages (31.03.2017 00:00 Uhr) und nicht am Ende des Tages (31.03.2017 23:59 Uhr) aus.

     

    Daher müsste man auf das anegebene Datum immer +1 Tag rechnen.

     

    Ich habe es erst so versucht

     

    #Datum aufsplitten
    $tag = $($ablaufdatum_projektuser.substring(0,2))
    $monat = $($ablaufdatum_projektuser.substring(3,2))
    $jahr = $($ablaufdatum_projektuser.substring(6,4))
    
    #Einen Tag hinzufügen, damit der Account korrekt abläuft
    $tag = [INT]$tag +1
    
    #Neues Datum zusammensetzen
    $ablaufdatum_projektuser = "$tag"+"/"+"$monat"+"/"+"$jahr"
    
    #Ablaufdatum setzen
    Set-ADAccountExpiration $username $ablaufdatum_projektuser -Confirm:$false}
    

     

    Dieser Versucht klappt aber nur bis zum vorletzen Tag des jeweiligen Monats.

     

    Daher müsste man das irgendwie mit einer Datums-Funktion (AddDays) o.Ä. machen.

     

    Jemand ein Idee für mich?

     

     

    Schon einmal vielen Dank

  17. Hallo zusammen,

     

    wir verwenden für unsere Serververwaltung das Tool Racktables.

     

    Da wir virtuelle Server (VMwware) per Powerhell und PowerCLI ausrollen, bin ich jetzt dabei automatisiert einen Eintrag in der Datenbank erzeugen zu lassen.

     

    Leider kenne ich mich damit noch gar nicht aus und bin auf jede Hilfe angewiesen

     

    BIsher habe ich mir im Netz folgendendes zusammengesucht

    cls
    
    $apiUser="be28f0a29e7df3b9a455871abdb25d2a"
    
    $apiPass="a8b15299dbbc374a05c7b8068001b634"
    
    $res="http://serverdoku.XXX.local:9292/object"
    
    
    
    $apiHash = ConvertTo-SecureString $apiPass -AsPlainText -Force
    
    $apiCred = New-Object Management.Automation.PSCredential ($apiUser, $apiHash)
    
    
    
    $data = "{ 'name':VNTS999, 'Funktion':'Test'}"
    
    
    
    Invoke-WebRequest -Uri $res -Credential $apiCred -Method Post -Body $data -ContentType "application/json"
    

    Fehlermeldung

    Invoke-WebRequest : MultiJson::LoadError at /object
    
    795: unexpected token at '{ 'name':VNTS999, 'Funktion':'Test'}'
    
    Ruby/usr/ruby/2.1/lib/ruby/2.1.0/json/common.rb: in parse, line 155
    
    WebPOST serverdoku.XXXX.local/object
    
    Jump to:
    
    GET POST Cookies ENV Traceback (innermost first)
    
    /usr/ruby/2.1/lib/ruby/2.1.0/json/common.rb: in parse
    
    # the default.
    
    # * *create_additions*: If set to false, the Parser doesn't create
    
    # additions even if a matching class and create_id was found. This option
    
    # defaults to true.
    
    # * *object_class*: Defaults to Hash
    
    # * *array_class*: Defaults to Array
    
    def parse(source, opts = {})
    
    Parser.new(source, opts).parse...end
    
    # Parse the JSON document _source_ into a Ruby data structure and return it.
    
    # The bang version of the parse method defaults to the more dangerous values
    
    # for the _opts_ hash, so be sure only to parse trusted _source_ documents.
    
    #
    
    # _opts_ can have the following keys:
    
    /usr/ruby/2.1/lib/ruby/2.1.0/json/common.rb: in parse
    
    # the default.
    
    # * *create_additions*: If set to false, the Parser doesn't create
    
    # additions even if a matching class and create_id was found. This option
    
    # defaults to true.
    
    # * *object_class*: Defaults to Hash
    
    # * *array_class*: Defaults to Array
    
    def parse(source, opts = {})
    
    Parser.new(source, opts).parse...end
    
    # Parse the JSON document _source_ into a Ruby data structure and return it.
    
    # The bang version of the parse method defaults to the more dangerous values
    
    # for the _opts_ hash, so be sure only to parse trusted _source_ documents.
    
    #
    
    # _opts_ can have the following keys:
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/multi_json-1.8.4/lib/multi_json/adapters/json_common.rb: in load
    
    string = string.read if string.respond_to?(:read)
    
    if string.respond_to?(:force_encoding)
    
    string = string.dup.force_encoding(::Encoding::ASCII_8BIT)
    
    end
    
    options[:symbolize_names] = true if options.delete(:symbolize_keys)
    
    ::JSON.parse(string, options)...end
    
    def dump(object, options={})
    
    options.merge!(::JSON::PRETTY_STATE_PROTOTYPE.to_h) if options.delete(:pretty)
    
    object.to_json(options)
    
    end
    
    end
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/multi_json-1.8.4/lib/multi_json/adapter.rb: in load
    
    metaclass.instance_eval do
    
    define_method("default_#{action}_options"){ value }
    
    end
    
    end
    
    def load(string, options={})
    
    raise self::ParseError if blank?(string)
    
    instance.load(string, collect_load_options(options).clone)...end
    
    def dump(object, options={})
    
    instance.dump(object, collect_dump_options(options).clone)
    
    end
    
    protected
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/multi_json-1.8.4/lib/multi_json.rb: in load
    
    # <b>Options</b>
    
    #
    
    # <tt>:symbolize_keys</tt> :: If true, will use symbols instead of strings for the keys.
    
    # <tt>:adapter</tt> :: If set, the selected adapter will be used for this call.
    
    def load(string, options={})
    
    adapter = current_adapter(options)
    
    begin
    
    adapter.load(string, options)...rescue adapter::ParseError => exception
    
    raise LoadError.new(exception.message, exception.backtrace, string)
    
    end
    
    end
    
    alias decode load
    
    def current_adapter(options={})
    
    /opt/racktables/racktables_api/lib/logistician/repository/multi_resource.rb: in post
    
    ups = 0
    
    updates = repository.multi_update(ctx, input, objects )
    
    ups = updates.do!
    
    return success( ctx, 'updated' => ups )
    
    end
    
    def post( ctx, env )
    
    input = MultiJson.load(env['rack.input'])...nu = nil
    
    create = repository.create(ctx, input )
    
    nu = create.do!
    
    return created( ctx, nu )
    
    end
    
    end
    
    /opt/racktables/racktables_api/lib/logistician/resource.rb: in call
    
    def patch(ctx, env)
    
    raise Unsupported
    
    end
    
    def call(env)
    
    method = ACTION[env["REQUEST_METHOD"]]
    
    ctx = Utils.context(env)
    
    self.__send__(method, ctx, env)...end
    
    end
    
    end
    
    /opt/racktables/racktables_api/lib/logistician/repository/shared.rb: in block in call
    
    end
    
    def call(env)
    
    Logistician::Utils.context(env).use(:statsd) do |statsd|
    
    statsd_prefix = ['resources',name,'actions',env['addressive'].action,env['REQUEST_METHOD']].join('.')
    
    time = Time.now
    
    begin
    
    result = super...if result[0] == 200
    
    statsd.timing("#{statsd_prefix}.inner_time", (Time.now - time)*1000 )
    
    end
    
    return result
    
    ensure
    
    statsd.increment("#{statsd_prefix}.count")
    
    end
    
    /opt/racktables/racktables_api/lib/logistician/context.rb: in use
    
    @data = {}
    
    @builder = {}
    
    end
    
    def use(*modules)
    
    if useable? *modules
    
    if block_given?
    
    return yield( *modules.map{|r| @data[r] } )...else
    
    return *modules.map{|r| @data[r] }
    
    end
    
    else
    
    return nil
    
    end
    
    end
    
    /opt/racktables/racktables_api/lib/logistician/repository/shared.rb: in call
    
    end
    
    def to_s
    
    return ['<',self.class.name,' for ',repository,'>'].join
    
    end
    
    def call(env)
    
    Logistician::Utils.context(env).use(:statsd) do |statsd|...statsd_prefix = ['resources',name,'actions',env['addressive'].action,env['REQUEST_METHOD']].join('.')
    
    time = Time.now
    
    begin
    
    result = super
    
    if result[0] == 200
    
    statsd.timing("#{statsd_prefix}.inner_time", (Time.now - time)*1000 )
    
    end
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/addressive-0.1.0/lib/addressive/router.rb: in block in call
    
    "[ ? ] url: #{rr.url.inspect}, path: #{rr.fullpath.inspect}"
    
    end
    
    matches = routes_for(rr.fullpath, rr.url)
    
    result = nil
    
    matches.each do |addressive|
    
    env[ADDRESSIVE_ENV_KEY] = addressive
    
    begin
    
    result = (addressive.spec.callback || addressive.spec.app).call(env)...db.call(DEBUG_NAME) do
    
    "[#{result[0]}] #{addressive.spec.template.pattern} with #{addressive.variables.inspect} on #{addressive.spec.app} ( route #{addressive.data[:'routes.scanned']} /
    
    #{addressive.data[:'routes.total']} ) after #{'%.6f' % addressive.data[:duration]}"
    
    end
    
    rescue
    
    db.call(DEBUG_NAME) do
    
    "[!!!] #{addressive.spec.template.pattern} with #{addressive.variables.inspect} on #{addressive.spec.app} ( route #{addressive.data[:'routes.scanned']} /
    
    #{addressive.data[:'routes.total']} ) after #{'%.6f' % addressive.data[:duration]}"
    
    end
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/addressive-0.1.0/lib/addressive/router.rb: in block in each
    
    # @yield {Addressive::Match}
    
    def each
    
    total = @routes.size
    
    scan_time = Time.now
    
    @routes.each(@proto,@host,@path) do |spec, vars, scanned|
    
    node, action = @actions[spec];
    
    t = Time.now
    
    yield Match.new(node, action, vars, spec, {:'routes.scanned'=>scanned,:'routes.total'=>total,:duration => (t - scan_time)})...# still here?, the passed time should
    
    be added
    
    scan_time += (Time.now - t)
    
    end
    
    end
    
    end
    
    (eval): in each
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/addressive-0.1.0/lib/addressive/router.rb: in each
    
    @routes,@proto,@host,@path,@actions = routes, proto, host,path, actions
    
    end
    
    # @yield {Addressive::Match}
    
    def each
    
    total = @routes.size
    
    scan_time = Time.now
    
    @routes.each(@proto,@host,@path) do |spec, vars, scanned|...node, action = @actions[spec];
    
    t = Time.now
    
    yield Match.new(node, action, vars, spec, {:'routes.scanned'=>scanned,:'routes.total'=>total,:duration => (t - scan_time)})
    
    # still here?, the passed time should be added
    
    scan_time += (Time.now - t)
    
    end
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/addressive-0.1.0/lib/addressive/router.rb: in call
    
    l = env['rack.logger']
    
    db = l ? l.method(:debug) : DEBUG_NULL
    
    db.call(DEBUG_NAME) do
    
    "[ ? ] url: #{rr.url.inspect}, path: #{rr.fullpath.inspect}"
    
    end
    
    matches = routes_for(rr.fullpath, rr.url)
    
    result = nil
    
    matches.each do |addressive|...env[ADDRESSIVE_ENV_KEY] = addressive
    
    begin
    
    result = (addressive.spec.callback || addressive.spec.app).call(env)
    
    db.call(DEBUG_NAME) do
    
    "[#{result[0]}] #{addressive.spec.template.pattern} with #{addressive.variables.inspect} on #{addressive.spec.app} ( route #{addressive.data[:'routes.scanned']} /
    
    #{addressive.data[:'routes.total']} ) after #{'%.6f' % addressive.data[:duration]}"
    
    end
    
    rescue
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/urlmap.rb: in block in call
    
    rest = m[1]
    
    next unless !rest || rest.empty? || rest[0] == ?/
    
    env['SCRIPT_NAME'] = (script_name + location)
    
    env['PATH_INFO'] = rest
    
    return app.call(env)...end
    
    [404, {"Content-Type" => "text/plain", "X-Cascade" => "pass"}, ["Not Found: #{path}"]]
    
    ensure
    
    env['PATH_INFO'] = path
    
    env['SCRIPT_NAME'] = script_name
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/urlmap.rb: in each
    
    def call(env)
    
    path = env["PATH_INFO"]
    
    script_name = env['SCRIPT_NAME']
    
    hHost = env['HTTP_HOST']
    
    sName = env['SERVER_NAME']
    
    sPort = env['SERVER_PORT']
    
    @mapping.each do |host, location, match, app|...unless hHost == host \
    
    || sName == host \
    
    || (!host && (hHost == sName || hHost == sName+':'+sPort))
    
    next
    
    end
    
    next unless m = match.match(path.to_s)
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/urlmap.rb: in call
    
    def call(env)
    
    path = env["PATH_INFO"]
    
    script_name = env['SCRIPT_NAME']
    
    hHost = env['HTTP_HOST']
    
    sName = env['SERVER_NAME']
    
    sPort = env['SERVER_PORT']
    
    @mapping.each do |host, location, match, app|...unless hHost == host \
    
    || sName == host \
    
    || (!host && (hHost == sName || hHost == sName+':'+sPort))
    
    next
    
    end
    
    next unless m = match.match(path.to_s)
    
    /opt/racktables/racktables_api/lib/caller.rb: in call
    
    end
    
    def initialize(app)
    
    @app = app
    
    end
    
    def call(env)
    
    return @app.call(env)...end
    
    end
    
    /opt/racktables/racktables_api/lib/racktables_api.rb: in block (2 levels) in builder
    
    use Logistician::Context::Build, :addressive do |ctx, mod, env|
    
    ctx[:addressive] = env['addressive'] if env.key?('addressive')
    
    end
    
    use ClientCounter
    
    use Caller do |env|
    
    env['QUERY_STRING'].gsub!('+','%20')
    
    super(env)...end
    
    node_old = Addressive.node(:api) do
    
    edge :object do
    
    app API[Model::RackObject], rewrite: ->(spec){
    
    /opt/racktables/racktables_api/lib/client_counter.rb: in call
    
    @app = app
    
    end
    
    def call(env)
    
    Logistician::Utils.context(env).use(:statsd) do |statsd|
    
    statsd.increment('user_agent.'+parse_user_agent(env['HTTP_USER_AGENT']))
    
    end
    
    @app.call(env)...end
    
    private
    
    def parse_user_agent(ua)
    
    case(ua)
    
    when /\Axar\/v(\d+(?:\.\d+)*)\z/ then 'xar.'+$1
    
    /opt/racktables/racktables_api/lib/logistician/context.rb: in call
    
    end
    
    def call(env)
    
    ctx = Logistician::Utils.context(env)
    
    ctx.build(@name) do |*args|
    
    @block.call(*args, env, *@rest)
    
    end
    
    return @app.call(env)...end
    
    end
    
    extend Forwardable
    
    def_delegators :@data, :[]=, :fetch, :each, :to_h, :to_hash, *Enumerable.instance_methods
    
    /opt/racktables/racktables_api/lib/logistician/context.rb: in call
    
    @rest = rest
    
    @block = block
    
    end
    
    def call(env)
    
    ctx = Logistician::Utils.context(env)
    
    ctx[@name] ||= @block.call(env, *@rest)
    
    return @app.call(env)...end
    
    end
    
    class Build
    
    def initialize(app, name, *rest, &block)
    
    /opt/racktables/racktables_api/lib/api_key_authenticator.rb: in call
    
    auth = Rack::Auth::Basic::Request.new(env)
    
    return unauthorized unless auth.provided?
    
    return bad_request unless auth.basic?
    
    if( auth.credentials[0] =~ /\A\h{32}\z/ and auth.credentials[1] =~ /\A\h{32}\z/ )
    
    if valid_api?( *auth.credentials )
    
    key = Model::ApiKey[auth.credentials[0]]
    
    authenticate_env!(env, key)
    
    return @app.call(env)...end
    
    end
    
    unauthorized
    
    end
    
    end
    
    end
    
    /opt/racktables/racktables_api/lib/caller.rb: in call
    
    end
    
    def initialize(app)
    
    @app = app
    
    end
    
    def call(env)
    
    return @app.call(env)...end
    
    end
    
    /opt/racktables/racktables_api/lib/racktables_api.rb: in block (2 levels) in builder
    
    Rack::Builder.new do
    
    use Rack::Lint
    
    use Caller do |env|
    
    time = Time.now
    
    result = super(env)...
    
    if result[0] == 200 && env['addressive']
    
    Logistician::Utils.context(env).use(:statsd) do |statsd|
    
    statsd.timing( ['resources',env['addressive'].spec.app.name,'actions',env['addressive'].action, env['REQUEST_METHOD'] ,'total_time'].join('.'), (Time.now -
    
    time)*1000 )
    
    end
    
    end
    
    /usr/ruby/2.1/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/lint.rb: in _call
    
    assert("No env given") { env }
    
    check
    
    In Zeile:11 Zeichen:1
    
    + Invoke-WebRequest -Uri $res -Credential $apiCred -Method Post -Body $data -Conte ...
    
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
        + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    
        + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
    

    Ersteinmal soll der Eintrag automatisch erstellt werden. Zum Test mit festeingetragenen Werten.

     

    Wenn das funktioniert, will ich das gaze mit Variablen, die bei der Erstellung eines Server verwendet werden, versuchen.

     

     

    Ich hoffe ihr könnt mir weiter helfen.

     

     

    Vielen Danke schon einmal

  18. Hallo zusammen,

     

    bei der einrichtung eines neues User via PS-Script, geben wir immer eine PW ein.

     

    Kann man die Variable $pw irgenwie prüfen, ob Sie der PW-Polica (Sonderzeichen, Groß-, Kleinschreibung etc.) enstpricht ?

     

    Mein erster ansatz war:

     

     

    if($pw -like "*!* -or "*$*" ...)
    

    nur dann müsste ich ja alle Sonderzeichen, alle Groß- und Kleinbuchstaben sowie Zahlen angeben.

     

    Desweiteren dürfen Teile des Usernamens nicht im Pw vorkommen. Das müsste natürlich auch geprügt werden.

     

     

    Hat da jemand Erfahrung mit gemacht ?

     

     

    Danke schoneinmal

  19. Hallo zusammen,

     

    ich benötige dringend Hilfe.

     

    Gestern haben wir Daten von einem Laufwerk auf das andere migriert (mit Robocopy).

     

    Leider lief um 18 Uhr der SyncTask noch einmal, sodass die Datein, die in der Zeit bearbeitet wurden, jetzt wieder einen alten Stand haben.

     

    Auf dem Filesystem liegt noch eine Vorgängerversion von 18 Uhr, aus der wir bisher per Hand alles geforderte wiederherstellen konnten.

     

    Jetzt zur Frage: Wie bekomme die aktuellen Restdatem aus der Vorgängerversion jetzt ins Filesystem zurück?

     

    Macht es sinn, die komplette Vorgängerversion einmal zu Restoren und dann ein RobocopyTask drüber laufen zu lassen?

    Quelle = Vorgängerversion
    Ziel = Filesystem
    Optionen = Nur neue Datein kopieren
    

    Hat jemand Hilfe für mich?

     

    Vielen Dank schon einmal

     

    EDIT:

    Restore Robocopy Befehl:

     

    robocopy %quelle% %ziel% /E /XO /XX /Log:C:\Log.txt /TEE
    
  20. Ne Möglichkeit: statt Leerzeichen Tabulatoren verwenden.

    Frage: Wieso überhaupt der Umweg über ne Textdatei?!?

     

    Dein Problem: In der Textdatei wird's ne nichtproportionale Schrift sein, im Mailbody ne proportionale.

     

    Wieso Textdatei? Weil ich bis jetzt noch nicht weiß, wie man einen Mailbody mit mehreren Zeilen erstellt.

     

    Sonst würde ich das natürlich alles ohne Umweg in den Body schreiben

×
×
  • Neu erstellen...