如何访问Powershell二进制模块FileList属性中的文件

时间:2019-01-24 20:12:56

标签: c# .net powershell

我有一个文件与Powershell二进制模块捆绑在一起。清单中有一行,详细描述了附件。

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

This FileList preoperty seems to be pretty useless, just as a note?

  

与此模块一起打包的所有文件的列表。与ModuleList一样,FileList可以帮助您作为库存清单,而不会进行其他处理。

然后如何从cmdlet相对于模块根目录访问此文件?

似乎只有从脚本调用cmndlet时才评估以下内容。因此,它实际上并不是模块的一部分,而是名称所暗示的调用。

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 :(得分:0)

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"