我正在尝试访问自定义PowerShell模块的清单详细信息,该模块将清单文件与模块(psm1)文件一起存储在我的目录结构中。
访问清单详细信息(如Description,GUID等)的最佳方法是什么?
答案 0 :(得分:6)
psd1文件是有效的PowerShell脚本,因此最好让PowerShell解析该文件。
最简单的方法是使用Test-ModuleManifest cmdlet。从C#开始,它看起来像是:
using (var ps = PowerShell.Create())
{
ps.AddCommand("Test-ModuleManifest").AddParameter("Path", manifestPath);
var result = ps.Invoke();
PSModuleInfo moduleInfo = result[0].BaseObject as PSModuleInfo;
// now you can look at the properties like Guid or Description
}
其他方法无法处理解析PowerShell的复杂性,例如在尝试使用正则表达式时,很容易错误地处理注释或这里的字符串。
答案 1 :(得分:0)
添加对System.Management.Automation
的引用。然后,使用以下代码从Hashtable
文件中获取.psd1
。
static void Main(string[] args)
{
PowerShell ps = PowerShell.Create();
string psd = "C:\\Users\\Trevor\\Documents\\WindowsPowerShell\\Modules\\ISESteroids\\ISESteroids.psd1";
ps.AddScript(String.Format("Invoke-Expression -Command (Get-Content -Path \"{0}\" -Raw)", psd));
var result = ps.Invoke();
Debug.WriteLine(((Hashtable)result[0].ImmediateBaseObject)["Description"]);
}