Recursing o sistema de arquivos com o PowerShell
-
01-07-2019 - |
Pergunta
Qualquer acontecer de ter um script de exemplo para recursão um determinado diretório em um sistema de arquivos com o PowerShell? Em última análise, o que eu estou querendo fazer é criar um script que irá gerar listas de arquivos NSIS para me dado um diretório. Algo muito semelhante ao que foi feito aqui com um script.
Solução
Como halr9000 demonstrado, você pode usar o parâmetro de opção -recurse
do cmdlet Get-ChildItem
para recuperar todos os arquivos e diretórios sob um caminho especificado.
Parece que o script bash é ligada ao na sua pergunta salva os diretórios como bem, então aqui é uma função simples para retornar ambos os arquivos e diretórios em um único objeto de resultado:
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
}
Aqui está como você pode usá-lo para criar os mesmos instalar / desinstalar arquivos de texto com o exemplo de halr9000, incluindo desinstalar diretórios:
$files = Get-InstallFiles 'C:\some\directory'
$files.InstallFiles | Set-Content 'installfiles.txt'
$files.UninstallFiles + $files.Directories | Set-Content 'uninstallfiles.txt'
Outras dicas
Esta é uma porta "paráfrase" desse script bash.
$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