Один вопрос к вам;)
У меня есть эта функция:
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})
}
}
}
Посмотрите на $ Свойства
. Он должен быть оценен для каждого файла, а затем файл и его свойства должны быть обработаны дальше.
Примером его использования может быть:
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
для команды строки и запуска фрагмента примера, все в порядке.
Однако, когда я сохраняю функцию в модуле, импортирую ее и запускаю пример, переменная $ _
пуста. Кто-нибудь знает почему? И как это решить? (приветствуются и другие решения)
Результаты для функции, определенной в скрипте / введенной в командной строке:
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-
....