none
$_.Fullname zeigt mir nur den Dateinamen RRS feed

  • Frage

  • Hallo zusammen,

    ich bin absoluter Neuling und arbeite in einem vorgefertigtem Scripttemplate für die Verteilung von Programmen für SCCM.

    Ich möchte im Script alle Unterordner mit einem bestimmten Namen löschen. Ich mache das mit folgendem Aufruf:

    get-childitem "$env:windir\system32\Macromed\" -filter "Shockwave*"| foreach {
        Write-Log -Message "Delete Folder A: $_.FullName"
        Remove-Folder -Path "$_.FullName"
    }
    

    Die beiden Funktionen Write-Log und Remove-Folder gehören zu einer Funktionslibrary die wir hier benutzen. Das ist aber nicht das Problem.
    In der Konsole bekomme ich mit $_.Fullname den kompletten Pfad. Innerhalb des Scriptes aber nur den Dateinamen.
    Wo kann ich hier ansetzen??

    Danke und Gruß Mike

    Montag, 26. Oktober 2015 10:39

Antworten

  • Hallo Mike,

    das Problem ist dass $_.FullName innerhalb doppelter Anführungszeichen nicht korrekt aufgelöst wird.

    Probier das mal so:

    Get-ChildItem "$env:windir\system32\Macromed\" -Filter "Shockwave*" | Foreach-Object {
    	Write-Log -Message ("Delete Folder A: {0}" -f ($_.FullName))
    	Remove-Folder -Path ($_.FullName)
    }
    
    #   oder
    
    Get-ChildItem "$env:windir\system32\Macromed\" -Filter "Shockwave*" | Foreach-Object {
    	$DirToDel = $_.FullName
    	Write-Log -Message ("Delete Folder A: $DirToDel")
    	Remove-Folder -Path $DirToDel
    }
    

    Grüße
    Uwe

    Montag, 26. Oktober 2015 11:10

Alle Antworten

  • Hi Mike,

    nutz doch zum Löschen des Ordners die Funktion von PS:

    get-childitem "$env:windir\system32\Macromed\" -filter "Shockwave*"| foreach {
        Write-Log -Message "Delete Folder A: $_.FullName"
        Remove-Item -Path $_.FullName -Recurse 
        }

    Oder mit deiner Funktion so - dadurch, dass es im String ist, musst du es klammern:

    get-childitem "$env:windir\system32\Macromed\" -filter "Shockwave*"| foreach {
        Write-Log -Message "Delete Folder A: $_.FullName"
        Remove-Folder -Path "$($_.FullName)"
    }

    oder so

    get-childitem "$env:windir\system32\Macromed\" -filter "Shockwave*"| foreach {
        Write-Log -Message "Delete Folder A: $_.FullName"
        Remove-Folder -Path $_.FullName
    }



    Best regards,

    David das Neves

        

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - Munich

    Blog


    Creating Powershell GUIs with XAML? Take a look! PSGUI



    Montag, 26. Oktober 2015 10:54
  • Hallo Mike,

    das Problem ist dass $_.FullName innerhalb doppelter Anführungszeichen nicht korrekt aufgelöst wird.

    Probier das mal so:

    Get-ChildItem "$env:windir\system32\Macromed\" -Filter "Shockwave*" | Foreach-Object {
    	Write-Log -Message ("Delete Folder A: {0}" -f ($_.FullName))
    	Remove-Folder -Path ($_.FullName)
    }
    
    #   oder
    
    Get-ChildItem "$env:windir\system32\Macromed\" -Filter "Shockwave*" | Foreach-Object {
    	$DirToDel = $_.FullName
    	Write-Log -Message ("Delete Folder A: $DirToDel")
    	Remove-Folder -Path $DirToDel
    }
    

    Grüße
    Uwe

    Montag, 26. Oktober 2015 11:10
  • Danke David und Uwe!

    Der Hinweis mit der Klammer und dem nicht korrekten Auflösen hat geholfen. Ich habe mich für die Variante mit der $DirToDel-Variable entschieden. Die Variante mit dem -f klappte auch! Die andere Variante ist aber für Anfänger leichter zu lesen.

    Montag, 26. Oktober 2015 11:43