1

私は簡単な一時的な修正を作成しているので、これが汚い場合は申し訳ありませんが、-

目的

Powershells Register-Event cmd を使用して、フォルダーにドロップされたファイルを待機し、ファイルを解析して Excel に出力する関数を呼び出したいと思います。コーディングの側面については助けが必要ありません。概念だけです。このイベントがどこで実行され、どのリソースと連携する必要があるかについては、まだ少し謎です。

私が試したこと

  1. 下部にイベントが登録された 1 つの .ps1 ファイルがあり、上部に関数が呼び出され、バッチ ファイルによって呼び出されます。
    動作: 次の行で停止します:

    $sr = new-object System.IO.StreamReader($copyPath)
    

    これが .NET の私の最初の呼び出しであるため、これが .NET の問題であると想定していた理由です。

  2. 2 つの .ps1 ファイル、FileWatcher と Parser は、バッチ ファイルによって呼び出されて個別に実行されると、両方ともうまく機能します。
    動作: FileWatcher は「この行」を出力しますが、パーサーで行を出力できず、その行に到達しません。

    Register-ObjectEvent $fsw Changed -SourceIdentifier FileChange -Action {
      Write-Host "This Line"
      .\src\Parser.ps1
      Write-host "That Line"
    }
    
  3. 2 つの ps1 ファイルと 2 つのバッチ ファイルに移動するのと同じくらい必死になりました。うまくいかなかったとだけ言っておきましょう。

私が使用している一般的なバッチファイルコマンド:

powershell.exe -noexit C:\scripts\src\FileWatcher.ps1

質問

登録されたイベントから呼び出されたときに特定のコマンドが正常に実行され、.NET などの他のコマンドが機能しないのはなぜですか?

私が達成しようとしていることは可能ですか?

私の目的を達成するためのより良い方法はありますか? (スクリプトのみ。これは修正プログラムであることを忘れないでください)。

4

1 に答える 1

3

以下は私にとってはうまくいきました(コードは主にhereからコピーされました):

$folder = 'c:\Temp'
$filter = '*.*'

$monitor = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
  IncludeSubdirectories = $false;
  NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}

Register-ObjectEvent $monitor Created -SourceIdentifier FileCreated -Action {
  $name = $Event.SourceEventArgs.FullPath
  $sr = New-Object System.IO.StreamReader($name)
  Write-Host $sr.ReadToEnd()
  $sr.Close()
}
于 2013-06-25T17:40:29.920 に答える