Rekursion das Dateisystem mit Powershell
-
01-07-2019 - |
Frage
Jeder passieren ein Beispielskript haben, ein bestimmtes Verzeichnis in einem Dateisystem mit Powershell für Rekursion? Letzten Endes zu tun, was ich will ist ein Skript erstellen, NSIS Dateilisten generieren für mich ein Verzeichnis angegeben. Etwas sehr ähnlich zu dem, was getan wurde hier mit einem BASH-Skript.
Lösung
Wie halr9000 demonstriert, können Sie die -recurse
Switch-Parameter verwenden das Get-ChildItem
Cmdlets alle Dateien und Verzeichnisse unter einem bestimmten Pfad abgerufen werden.
Es sieht aus wie der Bash-Skript, das Sie verknüpft in Ihrer Frage als auch die Verzeichnisse speichert heraus, so ist hier eine einfache Funktion sowohl die Dateien und Verzeichnisse in einem einzigen Ergebnis-Objekt zurückgeben:
function Get-InstallFiles {
param( [string]$path )
$allItems = Get-ChildItem -path $path -recurse
$directories = $allItems | ? { $_.PSIsContainer } | % { $_.FullName }
$installFiles = $allItems | ? { -not $_.PSIsContainer } | % { $_.FullName }
$uninstallFiles = $installFiles[-1..-$installFiles.Length]
$result = New-Object PSObject
$result | Add-Member NoteProperty Directories $directories
$result | Add-Member NoteProperty InstallFiles $installFiles
$result | Add-Member NoteProperty UninstallFiles $uninstallFiles
return $result
}
Hier ist, wie Sie es verwenden, kann die gleichen Installation / Deinstallation von Textdateien von halr9000 dem Beispiel, einschließlich Deinstallation Verzeichnisse zu erstellen:
$files = Get-InstallFiles 'C:\some\directory'
$files.InstallFiles | Set-Content 'installfiles.txt'
$files.UninstallFiles + $files.Directories | Set-Content 'uninstallfiles.txt'
Andere Tipps
Dies ist eine "paraphrasieren" Port dieses Bash-Skript.
$path = "c:\path\to\program"
$installFiles = "installfiles_list.txt"
$uninstFiles = "uninstfiles_list.txt"
$files = get-childitem -path $path -recurse | where-object { ! $_.psIsContainer } # won't include dirs
$filepath = $files | foreach-object { $_.FullName }
$filepath | set-content $installFiles -encoding ASCII
$filepath[($filepath.length-1)..0] | set-content $uninstFiles -encoding ASCII