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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top