Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ImportPSModule故障检测_C#_.net_Powershell_Pssnapin_Runspace - Fatal编程技术网

C# ImportPSModule故障检测

C# ImportPSModule故障检测,c#,.net,powershell,pssnapin,runspace,C#,.net,Powershell,Pssnapin,Runspace,我正在尝试使用InitialSessionState.ImportPSModule导入Powershell模块 我很想知道模块导入是否由于任何原因(如未找到文件等)而失败。如果出现故障,将此类代码放入try块不会引发异常,并且函数似乎会无声地失败,如果无法导入模块,则会继续 如果导入失败,是否有方法在代码中发出警报 我正在尝试做如下的事情。在下面的代码中,模块“TestModule1234”不存在。catch块不捕获异常 注意:这只是原型测试代码,所以请忽略任何与生产代码相关的异常情况 try

我正在尝试使用
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
    ),并在打开后分析其是否存在特定的“缺失模块”错误或其他错误
  • 下面是PowerShell中仅使用.NET方法的工作示例,因此它被逐字翻译为C#。此脚本不会失败(不会引发异常),但它会将获得的错误显示为变量
    错误

    $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:String)[导入模块],FileNotFoundException +FullyQualifiedErrorId:Modules\u ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand


    如果我运行
    import module xyz
    I获取
    import module:指定的模块“xyz”未加载,因为在任何模块目录中都找不到有效的模块文件。
    。你能告诉我们你是如何尝试导入模块的吗?编辑原始问题来展示我正在尝试做的一个例子。