Импорт CSV и выходной каталог, имя и владелец каждого файла.показ неверного аргумента - PullRequest
0 голосов
/ 30 января 2019

Я использовал инструмент для поиска поврежденных PDF-файлов в каталоге и вывел путь к этим PDF-файлам в CSV-файл.Я пытаюсь взять содержимое этого CSV и получить каталог, имя файла и владельца этих файлов.Мой скрипт выдает ошибку, которая, кажется, указывает на проблему со значениями в моем CSV.Если я делаю это вручную (без цикла), я получаю ожидаемые результаты.Я только начал писать свои собственные сценарии (стараясь больше не быть сценаристом) и с нетерпением жду возможности извлечь уроки из любой предоставленной помощи / руководства.

Заранее спасибо!Любая помощь очень ценится.Спасибо!

Мой сценарий:

$FileList = import-csv "C:\scripts\CorruptedPDFinder_results.csv"
foreach ($File in $FileList){
write-verbose "Reading $File..." -verbose
get-item $File | select directory,name,@{name="Owner";expression = {(Get-ACL $_.Fullname).Owner}}
}

Вывод:

VERBOSE: Reading @{FilePath=    \\vs30\Sales_Jackets\COMPANY_83\Sales Orders\18393\Invoice #18393 - Print_072718140428.pdf  }...
get-item : Illegal characters in path.
At line:4 char:1
+ get-item $File | select directory,name,@{name="Owner";expression = {( ...
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\scripts\@{Fi...718140428.pdf }:String) [Get-Item], ArgumentException
    + FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.GetItemCommand

get-item : Cannot find path 'C:\scripts\@{FilePath= \vs30\Sales_Jackets\COMPANY_83\Sales Orders\18393\Invoice #18393 - Print_072718140428.pdf   }' because it does not exist.
At line:4 char:1
+ get-item $File | select directory,name,@{name="Owner";expression = {( ...
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\scripts\@{Fi...718140428.pdf  }:String) [Get-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand

Если я делаю это вручную (без цикла), я получаю ожидаемые результаты.Я только начал писать свои собственные сценарии (стараясь больше не быть сценаристом детищем) и с нетерпением жду возможности извлечь уроки из любой предоставленной помощи / руководства.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вам нужно перебрать правильный член.Когда вы используете Import-Csv, вы получаете массив pscustomobject, который представляет каждую строку со свойствами, соответствующими заголовкам.

Если вы используете v3 + (реализует автоматическое перечисление членов):

foreach ($file in $FileList.FilePath) {
    Get-Item -Path $file
}

v2:

foreach ($file in ($FileList | Select-Object -ExpandProperty FilePath)) {

Если вы заботитесь о других заголовках, другой ответ, вероятно, более подходит, поскольку вы можете работать с ними, находясь в блоке цикла.

0 голосов
/ 30 января 2019

CSV содержит заголовок, поэтому, возможно, если ваш CSV похож на ниже.

FilePath    Column2    Column3
--------    ---------  ---------
path1      somevalue1  somevalue2

Тогда вот как вы выбираете путь в итерации.Вы должны выбрать вишню собственности.

Foreach($File in $FileList){
    Get-Item -Path $File.FilePath
}
...