Экспортировать все имена файлов на всех дисках PowerShell - PullRequest
0 голосов
/ 20 февраля 2020

Я должен экспортировать имена всех файлов на всех дисках на некоторых машинах. На данный момент у меня есть эта командная строка.

$date = (Get-Date).tostring("dd-MM-yyyy")
gci . *.* -rec | where { ! $_.PSIsContainer} | Select-Object FullName | Export-Csv -Delimiter ";" C:\$env:COMPUTERNAME'_'FilesAudit'_'$date.csv -NoTypeInformation

Проблема в том, что если я выполняю этот код, он извлекает информацию только с диска, на котором я работаю, а не с других дисков.

Я не знаю, как я могу получить информацию с других дисков, и, как дополнительная проблема, у каждой машины есть разные диски, например, C: + D: или C: + E: или C: + F: + Q: et c ..

Кто-то знает, как мне помочь.

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Что-то вроде этого может работать для вас:

$drives = Get-PSDrive -PSProvider FileSystem

foreach ($drive in $drives){
    Get-ChildItem $drive.Root -Recurse
}

Дайте мне знать, как вы попали на

0 голосов
/ 20 февраля 2020

При просмотре вашего последнего комментария вы используете foreach l oop без захвата чего-либо, и после этого Export-Csv захочет узнать, что вы экспортируете.

Если вы используете ForEach-Object вместо foreach ($drive in $drives), вы можете использовать переменную $_ automati c, ПЛЮС вы можете направить результат в командлет Export-Csv.

# create the CSV filename to output
$outFile = 'C:\{0}_FilesAudit_{1:dd-MM-yyyy}.csv' -f $env:COMPUTERNAME, (Get-Date)
Get-PSDrive -PSProvider FileSystem | ForEach-Object {
    # if your PowerShell version is less than 3.0 you'll need
    # Get-ChildItem $_.Root -Recurse | Where-Object {!$_.PSIsContainer} |
    Get-ChildItem $_.Root -Recurse -File -ErrorAction SilentlyContinue | 
        Select-Object @{Name = 'FileName'; Expression = {$_.FullName}}   # maybe also select the Length property?
} | Export-Csv -Path $outFile -Delimiter ';' -NoTypeInformation

-ErrorAction SilentlyContinue позволяет вы продолжаете итерацию, даже если у вас нет разрешений ни на одном из дисков / папок, что часто имеет место на диске C: *. 1013 * Это означает, что вы, вероятно, не получите complete список всех файлов.

Сказав это, вы уверены, что имеете разрешение на запись выходного CSV-файла на C:?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...