Jump to content

ducke

Premium Member
  • Gesamte Inhalte

    624
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von ducke

  1. Hallo Matthes, für dein Problem gibt es mehrere Lösungsansätze. Entweder du zerteilst den String mit substring oder du nutzt RegEx oder du versuchst den String mit Datetime.TryParseExact zu parsen. Bei der substring Methode wird stumpf geteilt und wenn im String Buchstaben oder ähnliches drin sind, wird das nicht überprüft. Mit RegEx werden nur Zahlen akzeptiert (\d). Die eleganteste Methode ist imho die Datetime.tryparseexact. Dort hast du nach dem Parsen ein Datetime Object. Ein paar Beispiele: $string = "201306120817" [datetime]$dirDate = New-Object DateTime if ([DateTime]::TryParseExact($string, "yyyyMMddhhmm", [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimeStyles]::None, [ref]$dirDate)) { $Jahr = $dirdate.Year $Monat = $dirDate.Month $Tag = $dirDate.Day $Stunde = $dirDate.Hour $Minute = $dirDate.Minute "Jahr:{0} Monat:{1} Tag:{2} Stunde:{3} Minute:{4}" -f $Jahr,$Monat,$Tag,$Stunde,$Minute } else { "String nicht im richtigen Format!" } $string = "201306120817" if ($string -match "^(?<jahr>\d{4})(?<monat>\d{2})(?<tag>\d{2})(?<stunde>\d{2})(?<minute>\d{2})") { $Jahr = $matches["jahr"] $Monat = $matches["monat"] $Tag = $matches["tag"] $Stunde = $matches["stunde"] $Minute = $matches["minute"] "Jahr:{0} Monat:{1} Tag:{2} Stunde:{3} Minute:{4}" -f $Jahr,$Monat,$Tag,$Stunde,$Minute } else { "String nicht im richtigen Format!" } $string = "201306120817" $Jahr = $string.Substring(0,4) $Monat = $string.Substring(4,2) $Tag = $string.Substring(6,2) $Stunde = $string.Substring(8,2) $Minute = $string.Substring(10,2) "Jahr:{0} Monat:{1} Tag:{2} Stunde:{3} Minute:{4}" -f $Jahr,$Monat,$Tag,$Stunde,$Minute Wie auch immer, dass ist ein gutes Beispiel für die Vielfalt von Powershell. Mehrere Wege führen zum Ziel :)
  2. Um dich weiter zu verwirren noch eine Methode via regex $test = Get-Content C:\temp\ownertest.txt #regex string $regex = [regex]"[A-Z]\d{3}[A-Z]\d{3}" #save regex results in variable $result = $regex.Matches($test).value #Create empty Array $output = @() $result | %{ #Create PSObject with owner Property $ret = "" | select owner #Save Pipeoutput in Custom Object $ret.owner = $_ #Save in Array $output += $ret } $output
  3. Oder bei der Installation noch ein paar Properties mehr setzen: JAVAUPDATE=0 AUTOUPDATECHECK=0 JU=0
  4. Hier findest du die notwendigen Infos zum Thema: http://technet.microsoft.com/en-us/library/ff730951.aspx
  5. Es gibt bei Powershell zwei Arten von Errors. Die Terminating errors und non-terminating errors. Terminating errors werden mit try + catch aufgefangen. Non-terminating errors leider nicht. Du kannst, wie Cybquest schon richtig erwähnt hat, mit -ErrorAction "Stop" arbeiten try { $ErrorActionPreference = "Stop" Set-SPUser ....... } catch { write-host $error[0].exception.Message } finally { $ErrorActionPreference = "Continue" } oder mit der Variable $? Set-SPUser ...... if ($?) { write-host "Alles toll :)" } else { write-host $error[0].exception.Message }
  6. Dein Wunsch sei mir Befehl :) Versuch es mal hiermit: $logpath = "c:\logfile" $filter = "*.txt" $date = [regex]"(?sm)^\d{4}-\d{2}-\d{2}.+?\Z" $logmatches = dir $logpath -Filter $filter | %{[io.file]::ReadAllText($_.FullName)} #$date.Matches($logmatches) | select -ExpandProperty matches $logmatches | Select-String $date | Foreach {$_.Matches} | Foreach {$_.Value}
  7. Kleiner Vorschlag meinerseits: $logpath = "c:\logfiles" #Mußt du natürlich anpassen $filter = "*.txt" $date = get-date -Format "yyyy-MM-dd" #welches datumsformat haben die logeinträge? $logmatches = dir $logpath -Filter $filter | Select-String -Pattern $date -AllMatches Send-MailMessage -SmtpServer "smtpserver.local" -From "du@email.de" -to "empfaenger@email.de" -Subject "Daily Logs" -Body ($logmatches | Out-String)
  8. Hallo Manfred, mit Powershell ist das ziemlich einfach. [System.Console]::ForegroundColor [System.Console]::BackgroundColor Bei einer Batch habe ich nur das hier gefunden: http://www.mailsend-online.com/blog/getting-the-windows-console-text-color.html Vielleicht hilft Dir das weiter. Gruß Manuel
  9. Hallo Thomas, du kannst die Ausgabe mit Out-File umleiten. Dort gibt es die Option das Encoding einzustellen wbadmin start backup /? | out-file C:\temp\wbadmin.txt -Encoding utf8 -Append
  10. Interessantes Problem :) Mit ein bisschen RegEx Magic kann man da schon was machen. Hier mal mein Vorschlag: $faxxml = [xml](Get-Content d:\temp\testfax.xml) $result = @{} $regex = [regex]"(?sm)^(?<key>(\b\w+[\s-/]\b[\w-]+|\b\w+)):\s(?<value>.+?)(\n|$)" $text = $faxxml.faxmakerstatus.fax.description foreach ($item in $regex.Matches($text)) { $result.Add($item.Groups["key"].value,$item.Groups["value"].value) } $MailMessage = @" To = $($result["Absender E-Mail"]) From = faxmaker@firma.de Subject = $($result["Betreff"]) Smtpserver = smtpserver "@ $msgparm = ConvertFrom-StringData $MailMessage Send-MailMessage @msgparm -Body ($result | ft -Wrap | Out-String) Zum Code selber. Ich schnappe mir die Description und jage einen Regex drüber. Damit befülle ich ein Hashtable und kann dann mit "$result["<key>"] an die Werte dran. Dann nehme ich einen Here-String ($mailmessage) und befülle die notwendigen Parameter für das Versenden der Mail. Als nächstes wird der Here-String noch in ein Hashtable umgewandelt (ConvertFrom-StringData) und an der Befehl Send-MailMessage übergeben. Den Body mache ich getrennt vom Hashtable. Alles klar soweit? ;)
  11. Hi martins, der 04.09. ist korrekt. Windows Server 2012 released to manufacturing! - Windows Server Blog - Site Home - TechNet Blogs
  12. Hatte ich aber auch erst nicht gesehen :) Geht auch mit New-ItemProperty -path HKLM:\Software\Innervation\$strScriptName -Name "LastRun" -Value ([system.DateTime]::Today.ToString()) -propertyType String | Out-Null
  13. Die Lösung steht doch in dem verlinkten Artikel!
  14. ducke

    WPAD u. DNS

    Puuh mal ein Schuss ins Blaue weil ich sonst keinerlei Erfahrung mit WPAD habe. Kann es evtl an der Kodierung von wpad.dat liegen (ANSI oder UNICODE64) Lade dir die Datei auf den Clients mal runter und öffne sie in der cmd mit edit. Sonst würde mir noch procmon oder wireshark einfallen als letzte Möglichkeit.
  15. ducke

    WPAD u. DNS

    Ein paar Fragen meinerseits: Welche Anleitung nutzt du? Mit welchem Browser hast du Probleme (oder mit allen)? DNS läuft 100% (nslookup wpad)? Auf welchem Webserver(IIS oder Apache) liegt deine wpad.dat? Zugriffsberechtigung auf den Webserver auch okay?
  16. Hier meine Quick-and-dirty Lösung: Powershell Script auf den Rechnern $path = "d:\temp\csv" $wmi = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE $result = ("" | select name,dhcpenabled,ipaddress,mac,dnssrv) $result.name = $wmi.DNSHostName $result.dhcpenabled = $wmi.DHCPEnabled $result.ipaddress = [string]::Join(" ",$wmi.IPAddress) $result.mac = $wmi.MACAddress $result.dnssrv = [string]::Join(" ",$wmi.DNSServerSearchOrder) $result | Export-Csv ("{0}\{1}.csv" -f $path,$wmi.DNSHostName) -Delimiter ";" -NoTypeInformation -Force Und hier zum Einsammeln: $path = "d:\temp\csv" $files = dir $path -Filter *.csv $data = @() foreach ($file in $files) { $data += Import-Csv $file.fullname -Delimiter ";" } $data | Export-Csv $path\totalsrv.csv -Delimiter ";" -NoTypeInformation Meiner Meinung nach ist der Export als CSV Datei sinnvoller als eine TXT Datei mit TAB getrennten Werten. Damit kannst du mit Import-CSV die Daten direkt weiterverarbeiten.
  17. Yep das verstehst du falsch :) Hier ist dein Problem: $PropagationFlag = [system.Security.AccessControl.PropagationFlags]::InheritOnly Mach mal bitte das: $PropagationFlag = [system.Security.AccessControl.PropagationFlags]::None Siehe auch PropagationFlags-Enumeration
  18. Ist Powershell eine Option? $html = @" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <div><div> <input onclick="this.select();" type="text" value="www.HP.de/test/{wieder die selbe Buchstabenfolge}[/img]]HP - Deutschland | Startseite - PCs, Drucker, Server, Speicherlösungen und mehr"/> </div></div> <div><div> <input onclick="this.select();" type="text" value="www.HP.de/test/{wieder die selbe Buchstabenfolge}[/img]]HP - Deutschland | Startseite - PCs, Drucker, Server, Speicherlösungen und mehr"/> <input onclick="this.select();" type="text" value="www.HP.de/test/{wieder die selbe Buchstabenfolge}[/img]]HP - Deutschland | Startseite - PCs, Drucker, Server, Speicherlösungen und mehr"/> </div></div> </body> </html> "@ Select-String -InputObject $html -Pattern "(?<input><input.+?/>)" -AllMatches | select -ExpandProperty Matches | foreach {$_.groups["input"].value}
  19. Hallo astalbold, zu aller erst würde ich Dir empfehlen mit dem NTFSSecurity Modul aus dem Script Center von Mircosoft zu arbeiten. Das macht das Leben viel leichter. Das Modul findest du hier (v1.3) Mit deinem Script hast du keine "saubere" Berechtigung, sondern du berechtigst einzeln. Hier ein Beispiel wie einfach das mit dem Modul geht: $path = "C:\temp\srv2k3test\dat\pub" $acc = "Domain\Peter.Pan" Get-Item $path | Add-Ace -Account $acc -AccessRights FullControl -InheritanceFlags ContainerInherit,ObjectInherit -AccessType Allow
  20. Sorry für die späte Rückmeldung, aber im Moment habe ich etwas Stress auf der Arbeit. Ich musste das Script nochmal anpassen. Da war ein kleiner Fehler drin :( Habe den Pfadnamen nicht richtig mitgegeben. $TestPath = "C:\sqltest1" dir $TestPath -Recurse | %{ get-acl $_.FullName} | %{ $pfad = New-Object psobject $pfad | Add-Member -MemberType NoteProperty -Name "Name" -Value (($_.Path -split "::")[1]); $_.access} | %{ $_ } | Select-Object @{ n="name";e={$pfad.Name}},@{ n="security_principal";e={$_.identityreference}},@{ n="type";e={$_.accesscontroltype}},@{ n="rights";e={$_.filesystemrights}} | Export-Csv "C:\sqltest1\excel.csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8 Zu deinen Fragen: Das n steht für Name. (Das e für Expression) Siehe dazu Select-Object Die Liste schreibt (fast) jede Berechtigung einzeln auf. Schau mal bitte per GUI auf Sicherheit -> Erweitert. Wenn dort spezielle Berechtigungen gesetzt sind, dann werden diese separat aufgelistet.
  21. Versuche es mal mit dem Script: $TestPath = "C:\sqltest1" dir $TestPath -Recurse | %{ get-acl $_.FullName} | %{ $_.access} | %{ $_ | Select-Object @{ n="name";e={$obj.fullname}},@{ n="security_principal";e={$_.identityreference}},@{ n="type";e={$_.accesscontroltype}},@{ n="rights";e={$_.filesystemrights}}} | Export-Csv "C:\sqltest1\excel.csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8 Format-Table benötigst du nicht und mit AccessToString bekommst du keine gescheite Formatierung hin (nur mit einigem gefummel). Ist auch nicht meine Lösung, sondern habe ich hier her
  22. Das mit den Authentifizieren Benutzern war mein Fehler. Als SYSTEM kannst du wie folgt deine Installation starten: Einfach eine cmd.exe als Administrator ausführen und dann psexec -i -s cmd.exe eingeben. Mit whoami kannst du überprüfen, ob du als SYSTEM unterwegs bist. Danach die MSI starten.
  23. Wenn du die Softwareverteilung über eine Computerrichtlinie machst, dann sollte bei der Berechtigung auf den Share das Konto Domänencomputer hinzugefügt werden.
  24. Für solche Abfragen nutze ich AdFind Dort hast du viel mehr Möglichkeiten der Sortierung und Ausgabe.
  25. Hi Pinf, welche Zone wird denn im IE für die Seite angezeigt? Und wie ist die Einstellung dieser Zone unter Extras -> Internetoptionen -> Sicherheit -> <Zone> -> Stufe anpassen -> Benutzerauthentifizierung ? Gruß Manuel
×
×
  • Neu erstellen...