我试图用InitialSessionState.ImportPSModule
以进口一个PowerShell模块。
我想知道,如果导入失败的模块由于某种原因(例如,未找到文件等)。 在try块把这样的代码不会引发故障的情况下的异常和功能似乎出现故障并在继续,如果它不能够导入模块。
有没有如果导入失败时在代码惊动了呢?
我试图做类似以下内容。 在下面的代码,模块“TestModule1234”不存在。 catch块不捕获异常。
注意:这仅仅是原型测试代码,所以请忽略任何生产代码相关的违规行为。
try
{
//Initializing the PowerShell runspace
InitialSessionState psSessionInitialState = InitialSessionState.CreateDefault();
LogFile.Log("Importing Module TestModule1234");
psSessionInitialState.ImportPSModule(new[] { "TestModule1234" });
LogFile.Log("Creating Powershell Runspace");
m_PoshRunspace = RunspaceFactory.CreateRunspace(psSessionInitialState);
}
catch (System.Exception ex)
{
LogFile.Log("Failed to create a Powershell Runspace");
LogFile.Log(ex.ToString());
throw;
}
对于一些原因的丢失模块不被视为致命错误。 但他们仍然重新编码错误。 为了解决这个问题做:
- 通过打开运行空间
Open()
为了赶上其他异常try块是怎么做的,他们是有可能,我在实践中有这样的情况。 - 获取标准错误列表(
$Error
),并打开特定的“失踪模块”错误或其他错误后进行分析。
这是只使用.NET方法,使得它直译为C#在PowerShell中的工作示例。 这个脚本不会失败(异常不抛出),但它显示为变量得到的错误Error
:
$psSessionInitialState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault();
"Importing Module TestModule1234"
$psSessionInitialState.ImportPSModule(@("TestModule1234"))
"Creating PowerShell Runspace"
$PoshRunspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($psSessionInitialState)
"Opening PowerShell Runspace"
$PoshRunspace.Open()
"Getting Runspace Error"
$PoshRunspace.SessionStateProxy.PSVariable.GetValue('Error')
产量
导入模块TestModule1234创建Powershell的运行空间打开PowerShell的运行空间获取运行空间错误导入模块:指定模块“TestModule1234”没有被加载,因为没有有效的模块文件在任何模块目录中找到。 + CategoryInfo:ResourceUnavailable:(TestModule1234:字符串)导入模块],FileNotFoundException异常+ FullyQualifiedErrorId:Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand