我有一个文件与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";
答案 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"