Как получить доступ к файлам в свойстве FileList двоичного модуля Powershell - PullRequest
0 голосов
/ 24 января 2019

У меня есть файл в комплекте с двоичным модулем powershell. В манифесте есть строка, которая детализирует прикрепленный файл.

# List of all files packaged with this module
FileList = @(".\assets\MoonPhase.sqlite")

Эта предопределенность FileList кажется довольно бесполезной, просто как примечание?

Список всех файлов, упакованных с этим модулем. Как и в случае с ModuleList, FileList предназначен для использования в качестве списка инвентаря и не обрабатывается иначе.

Как я могу получить доступ к этому файлу относительно корня модуля из командлета?

Кажется, что следующее выполняется только при вызове командлета из скрипта. Поэтому на самом деле это не часть модуля, а вызов, как следует из названия.

string path = this.MyInvocation.PSScriptRoot + "\\assets\\MoonPhase.sqlite";
string path = this.MyInvocation.PSCommandPath + "\\assets\\MoonPhase.sqlite";

Следующее кажется плохим выбором

string path = @"C:\Users\Me\Path\Project\bin\Debug\netstandard2.0\assets\MoonPhase.sqlite";

1 Ответ

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

Свойство FileList доступно внутри объекта MyInvocation, а файлы, перечисленные в манифесте, имеют абсолютные пути.

string path = MyInvocation.MyCommand.Module.FileList
#"C:\\Users\\Me\\Path\\Project\\bin\\Debug\\assets\\MoonPhase.sqlite"

Это IEnumerable, поэтому нужно извлечь из него строку с помощью linq, цикла или приведения.

string path = MyInvocation.MyCommand.Module.FileList.First();

Следующее также полезно для формирования относительных путей

string path = MyInvocation.MyCommand.Module.ModuleBase
#"C:\\Users\\Me\\Path\\Project\\bin\\Debug"

string path = MyInvocation.MyCommand.Module.ModuleBase + "\\OtherFile.txt"
#"C:\\Users\\Me\\Path\\Project\\bin\\Debug\\OtherFile.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...