Ricorso al file system con Powershell
-
01-07-2019 - |
Domanda
Qualcuno ha uno script di esempio per ricorrere a una determinata directory in un filesystem con Powershell? Alla fine quello che voglio fare è creare uno script che genererà per me una lista di elenchi di file NSIS. Qualcosa di molto simile a ciò che è stato fatto qui con uno script BASH.
Soluzione
Come halr9000 , puoi usare -recurse
parametro di commutazione del cmdlet Get-ChildItem
per recuperare tutti i file e le directory in un percorso specificato.
Sembra che lo script bash a cui ti sei collegato nella tua domanda salvi anche le directory, quindi ecco una semplice funzione per restituire sia i file che le directory in un singolo oggetto risultato:
function Get-InstallFiles {
param( [string]$path )
$allItems = Get-ChildItem -path $path -recurse
$directories = $allItems | ? { Come halr9000 , puoi usare -recurse
parametro di commutazione del cmdlet Get-ChildItem
per recuperare tutti i file e le directory in un percorso specificato.
Sembra che lo script bash a cui ti sei collegato nella tua domanda salvi anche le directory, quindi ecco una semplice funzione per restituire sia i file che le directory in un singolo oggetto risultato:
$files = Get-InstallFiles 'C:\some\directory'
$files.InstallFiles | Set-Content 'installfiles.txt'
$files.UninstallFiles + $files.Directories | Set-Content 'uninstallfiles.txt'
Ecco come è possibile utilizzarlo per creare gli stessi file di testo di installazione / disinstallazione dall'esempio di halr9000, comprese le directory di disinstallazione:
<*>.PSIsContainer } | % { Come halr9000 , puoi usare -recurse
parametro di commutazione del cmdlet Get-ChildItem
per recuperare tutti i file e le directory in un percorso specificato.
Sembra che lo script bash a cui ti sei collegato nella tua domanda salvi anche le directory, quindi ecco una semplice funzione per restituire sia i file che le directory in un singolo oggetto risultato:
<*>
Ecco come è possibile utilizzarlo per creare gli stessi file di testo di installazione / disinstallazione dall'esempio di halr9000, comprese le directory di disinstallazione:
<*>.FullName }
$installFiles = $allItems | ? { -not Come halr9000 , puoi usare -recurse
parametro di commutazione del cmdlet Get-ChildItem
per recuperare tutti i file e le directory in un percorso specificato.
Sembra che lo script bash a cui ti sei collegato nella tua domanda salvi anche le directory, quindi ecco una semplice funzione per restituire sia i file che le directory in un singolo oggetto risultato:
<*>
Ecco come è possibile utilizzarlo per creare gli stessi file di testo di installazione / disinstallazione dall'esempio di halr9000, comprese le directory di disinstallazione:
<*>.PSIsContainer } | % { Come halr9000 , puoi usare -recurse
parametro di commutazione del cmdlet Get-ChildItem
per recuperare tutti i file e le directory in un percorso specificato.
Sembra che lo script bash a cui ti sei collegato nella tua domanda salvi anche le directory, quindi ecco una semplice funzione per restituire sia i file che le directory in un singolo oggetto risultato:
<*>
Ecco come è possibile utilizzarlo per creare gli stessi file di testo di installazione / disinstallazione dall'esempio di halr9000, comprese le directory di disinstallazione:
<*>.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
}
Ecco come è possibile utilizzarlo per creare gli stessi file di testo di installazione / disinstallazione dall'esempio di halr9000, comprese le directory di disinstallazione:
<*>Altri suggerimenti
Questa è una "parafrasi" porta di quello script bash.
$path = "c:\path\to\program"
$installFiles = "installfiles_list.txt"
$uninstFiles = "uninstfiles_list.txt"
$files = get-childitem -path $path -recurse | where-object { ! Questa è una "parafrasi" porta di quello script bash.
<*>.psIsContainer } # won't include dirs
$filepath = $files | foreach-object { Questa è una "parafrasi" porta di quello script bash.
<*>.FullName }
$filepath | set-content $installFiles -encoding ASCII
$filepath[($filepath.length-1)..0] | set-content $uninstFiles -encoding ASCII