Jump to content

ducke

Premium Member
  • Gesamte Inhalte

    624
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt 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. 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
    }
  4. 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)
  5. 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? ;)

  6. Hi martins,

    der 04.09. ist korrekt.

    Sorry for the delay on getting this response up. I wanted to make sure I had the correct answer on when the bits will be available. I know everyone is very interested in downloading and getting access to the bits. We have already seen a huge amount of downloads of the evaluation bits. HUGE.

     

    I know some of you probably will not like my answer... All evaluation bits will be publicly available September 4th, 2012.

     

    Now, I am putting on my armor. Please be gentle.

     

    Kevin Beares

     

    Senior Community Lead - Windows Server

    @Thomas. Yes, the full RTM version of Windows Server 2012 (Not Eval) will be available on September 4th, 2012. Please let us know if this is causing major heartburn for any of you. We are listening.
    Forgot to mention that it will be available to both MSDN and TechNet Subscribers.

    Windows Server 2012 released to manufacturing! - Windows Server Blog - Site Home - TechNet Blogs

  7. 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.

  8. 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.

  9. 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}

  10. 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

  11. 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.

  12. 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

×
×
  • Neu erstellen...