0

そのため、しばらく前に、IIS ログを解析し、いくつかの処理 (電子メール、レポートの作成、およびその他の気の利いた処理) を実行する Powershell スクリプトを作成しました。さて、私はC#コンソールアプリからそれを実行することに取り組んでいます。コードを投稿する前に、1 つのことを明確にしたいと思います。ログ パーサーから離れて、多くの理由でこのログの原因を解析したいと思います。 )。だからここに私のコードがあります

PS スクリプト:

    $t1 =(get-date).AddMinutes(-10)
    $t2 =$t1.ToUniversalTime().ToString("HH:mm:ss")
    $IISLogPath = "C:\inetpub\logs\LogFiles\W3SVC1\"+"u_ex"+(get-date).AddDays(-3).ToString("yyMMdd")+".log" 
    $IISLogFileRaw = [System.IO.File]::ReadAllLines($IISLogPath) 
    $headers = $IISLogFileRaw[3].split(" ") 
    $headers = $headers | where {$_ -ne "#Fields:"} 
    $IISLogFileCSV = Import-Csv -Delimiter " " -Header $headers -Path $IISLogPath 
    $IISLogFileCSV = $IISLogFileCSV | where {$_.date -notlike "#*"} 
    $tape = $IISLogFileCSV | Format-Table time,s-ip,cs-uri-stem |  Out-Host

これまでの C# アプリ:

    Runspace runSpace = RunspaceFactory.CreateRunspace();
        runSpace.Open();
        Pipeline pipeline = runSpace.CreatePipeline();
        pipeline.Commands.AddScript(@"D:\PS-Scripts\IIS\IISLogScan.ps1");
        Collection<PSObject> results = pipeline.Invoke();
        foreach (PSObject obj in results)
        {
            Console.WriteLine(results);

        }
        Console.ReadLine();

今、アプリを実行すると何も表示されず、ブレークポイントを設定すると、foreach 内に表示するものが何もないと表示され、ps1 スクリプトを実行している原因に完全にハングアップしています。完全に機能し、多くの行が表示されます。誰もが与えることができる洞察は素晴らしいでしょう。

4

1 に答える 1

1

.ps1 ファイルを変更してみてください:

$global:tape =$IISLogFileCSV | Format-Table time,s-ip,cs-uri-stem

そしてC#で

pipeline.Commands.AddScript(@"D:\PS-Scripts\IIS\IISLogScan.ps1");
pipeline.Commands.AddScript("$tape");
pipeline.Commands.AddScript("out-string");

または .ps1:

$tape =$IISLogFileCSV | Format-Table time,s-ip,cs-uri-stem
$tape

そしてC#で

pipeline.Commands.AddScript(@"D:\PS-Scripts\IIS\IISLogScan.ps1");
pipeline.Commands.AddScript("out-string");
于 2013-03-19T08:10:33.777 に答える