QA@IT
«質問へ戻る

質問を投稿

C# Windows2008 R2でPowerShellコマンドが実行できない

Windows2008 R2 Standardサーバ上(PowerShell2.0の環境)でC#で作ったプログラムを実行しようとしましたが、エラーが出ます。
(全く同じプログラムを、Windows2012サーバ、PowerShell3.0の環境だと問題なく実行できます。)

PowerShellコマンドの実行時にエラーは下記の通りです。

An error occurred when loading the system Windows PowerShell Snap-Ins. Please contact Microsoft Support Services. 場所 System.Management.Automation.Runspaces.MshConsoleInfo.CreateDefaultConfiguration()
場所 System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.CreateDefaultConfiguration()
場所 System.Management.Automation.RunspaceInvoke..ctor()
場所 secLogFormatter.secLogFormatter.Main(String[] args)

2008サーバに.NET Framework4はインストールされています。プログラムは下記のとおりです。

using System;
using System.Text;
using System.IO;
using System.Data;
using System.Data.Odbc;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Management.Automation;
using System.Collections;
using Microsoft.VisualBasic.FileIO;

namespace secLogFormatter
{
    class secLogFormatter
    {
        static string currentPath = parameters.GetString("INPUT_FILE_NAME", "CURRENT_PATH");    //入力ファイル(名簿ファイル)
        static void Main(string[] args)
        {

            try
            {
                DirectoryInfo di = new DirectoryInfo(currentPath);
                FileInfo[] files = di.GetFiles("*Security*.evtx");
                Array.Sort(files,
                    delegate(FileInfo f1, FileInfo f2)
                    {
                        // 書き込み時刻で降順
                        return -f1.LastWriteTime.CompareTo(f2.LastWriteTime);
                    }
                );
                foreach (FileInfo strFilePath in files)
                {
                    string tmpScriptArchive = "get-winevent -FilterHashtable @{path='@strFilePath'; logname='Security'; ";
                    tmpScriptArchive += "id = (4778,4624); starttime = '@startTimeT00:00:00.000Z'; endtime = '@endTimeT14:59:59.999Z' } | select LevelDisplayName,TimeCreated,ProviderName,ID,TaskDisplayName,Message";
                    string script = tmpScriptArchive.Replace("@strFilePath", strFilePath.FullName).Replace("@startTime", startTime).Replace("@endTime", endTime);

                    using (RunspaceInvoke invoker = new RunspaceInvoke()) // ここでエラーがでる!
                    {
                        Console.WriteLine(script);
                        foreach (PSObject result in invoker.Invoke(script))
                        {
                            Console.WriteLine(1);
                        }
                    }
                }
            }
        }
    }
}

何がいけないのでしょうか。もしわかればご教授願います。

Windows2008 R2 Standardサーバ上(PowerShell2.0の環境)でC#で作ったプログラムを実行しようとしましたが、エラーが出ます。
(全く同じプログラムを、Windows2012サーバ、PowerShell3.0の環境だと問題なく実行できます。)

PowerShellコマンドの実行時にエラーは下記の通りです。

An error occurred when loading the system Windows PowerShell Snap-Ins. Please contact Microsoft Support Services.   場所 System.Management.Automation.Runspaces.MshConsoleInfo.CreateDefaultConfiguration()
   場所 System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.CreateDefaultConfiguration()
   場所 System.Management.Automation.RunspaceInvoke..ctor()
   場所 secLogFormatter.secLogFormatter.Main(String[] args)


2008サーバに.NET Framework4はインストールされています。プログラムは下記のとおりです。
```C#
using System;
using System.Text;
using System.IO;
using System.Data;
using System.Data.Odbc;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Management.Automation;
using System.Collections;
using Microsoft.VisualBasic.FileIO;

namespace secLogFormatter
{
    class secLogFormatter
    {
        static string currentPath = parameters.GetString("INPUT_FILE_NAME", "CURRENT_PATH");    //入力ファイル(名簿ファイル)
        static void Main(string[] args)
        {

            try
            {
                DirectoryInfo di = new DirectoryInfo(currentPath);
                FileInfo[] files = di.GetFiles("*Security*.evtx");
                Array.Sort(files,
                    delegate(FileInfo f1, FileInfo f2)
                    {
                        // 書き込み時刻で降順
                        return -f1.LastWriteTime.CompareTo(f2.LastWriteTime);
                    }
                );
                foreach (FileInfo strFilePath in files)
                {
                    string tmpScriptArchive = "get-winevent -FilterHashtable @{path='@strFilePath'; logname='Security'; ";
                    tmpScriptArchive += "id = (4778,4624); starttime = '@startTimeT00:00:00.000Z'; endtime = '@endTimeT14:59:59.999Z' } | select LevelDisplayName,TimeCreated,ProviderName,ID,TaskDisplayName,Message";
                    string script = tmpScriptArchive.Replace("@strFilePath", strFilePath.FullName).Replace("@startTime", startTime).Replace("@endTime", endTime);

                    using (RunspaceInvoke invoker = new RunspaceInvoke()) // ここでエラーがでる!
                    {
                        Console.WriteLine(script);
                        foreach (PSObject result in invoker.Invoke(script))
                        {
                        	Console.WriteLine(1);
                        }
                    }
                }
            }
        }
    }
}

```

何がいけないのでしょうか。もしわかればご教授願います。