Один вопрос для вас здесь;)
У меня есть эта функция:
function Set-DbFile {
param(
[Parameter(ValueFromPipeline=$true)]
[System.IO.FileInfo[]]
$InputObject,
[Parameter(ValueFromPipelineByPropertyName=$true)]
[scriptblock]
$Properties
)
process {
$InputObject | % {
Write-Host `nInside. Storing $_.Name
$props = & $Properties
Write-Host ' properties for the file are: ' -nonew
write-Host ($props.GetEnumerator()| %{"{0}-{1}" -f $_.key,$_.Value})
}
}
}
Посмотрите на $Properties
. Он должен быть оценен для каждого файла, а затем файл и свойства должны быть обработаны далее.
Пример использования может быть:
Get-ChildItem c:\windows |
? { !$_.PsIsContainer } |
Set-DbFile -prop {
Write-Host Creating properties for $_.FullName
@{Name=$_.Name } # any other properties based on the file
}
Когда я копирую и вставляю функцию Set-dbFile
в командную строку и запускаю фрагмент примера, все в порядке.
Однако, когда я храню функцию в модуле, импортирую ее и запускаю пример, переменная $_
пуста. Кто-нибудь знает, почему? И как его решить? (другие решения также приветствуются)
Результаты для функции, определенной в script/напечатанном в командной строке:
Inside. Storing adsvw.ini
Creating properties for C:\windows\adsvw.ini
properties for the file are: Name-adsvw.ini
Inside. Storing ARJ.PIF
Creating properties for C:\windows\ARJ.PIF
properties for the file are: Name-ARJ.PIF
....
Результаты для функции, определенной в модуле:
Inside. Storing adsvw.ini
Creating properties for
properties for the file are: Name-
Inside. Storing ARJ.PIF
Creating properties for
properties for the file are: Name-
....