で複数のプロセスを実行するだから私は、次の目的のためにセットアップされたスクリプトがあります:ファイルがフォルダ内に表示された場合PowerShellの - ウォッチ、複数のフォルダは、ファイル
- を単にそのサブフォルダ上のフォルダに移動します*例:c:¥My_Documents¥a> c:¥My_Documentsから移動する
- 毎回、ファイル名と試行番号がハッシュテーブルに格納されます。同じファイルが3回出現すると、ファイルは構造体とは全く別のフォルダに移動され、適切な領事館に電子メールが送信されます。 *例:c:¥My_Documents¥a> c:¥FailedFolder¥*
- ハッシュテーブル内のファイルのレコードは削除されます。また、ハッシュテーブル全体が10分ごとにクリアされます。
これは動作しますが、私の問題は、今私は、スクリプトがまったく同じように設定されているが、重複していない複数のフォルダのためにこれを行うように、これを展開する必要があるということです。 *例:c:\ My_Documents \> C:\ My_Documents & & C \:\ randomFolder \> C:\ randomFolder & & C \:\ AnotherRandomFolder \> C:\ AnotherRandomFolder \ *
してください誰かがこれを達成するのを助けることができる?そのようなことを自分で実装する必要はありません
$global:folder = 'C:\Users\random\Documents\IUR Test\r' # Enter the root path you want to monitor.
$global:origin = 'C:\Users\random\Documents\IUR Test'
$filter = '*.*' # You can enter a wildcard filter here.
$global:Failedfolder = 'C:\Users\random\Documents\Failed'
$global:Files = @{}
$timer = New-Object Timers.Timer
$timer.Interval = 600000 # fire every 10 minutes
$timer.AutoReset = $true # Enable the event again after its been fired
$timer.Enabled = $true
# In the following line, you can change 'IncludeSubdirectories to $true if required.
$fsw = New-Object IO.FileSystemWatcher $global:folder, $filter -Property @{IncludeSubdirectories = $false; NotifyFilter = [IO.NotifyFilters]'FileName,LastWrite'}
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier HashMapClear -Action {
$global:Files.clear()
}
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
ForEach ($file in (gci $global:folder))
{
$fName = $file.Name
if(-not $global:Files.ContainsKey($fName))
{
$global:Files.Add($fName,1)
Move-Item $File.Fullname $global:origin -force
}
Elseif($global:Files.Get_Item($fName) -lt 3)
{
$global:Files.Set_Item($fName,++$global:Files.Get_Item($fName))
Move-Item $File.Fullname $global:origin -force
}
Else
{
$global:Files.Remove($fName)
Move-Item $File.Fullname $global:Failedfolder -force
#### Send error email
}
}
}
# To stop the monitoring, run the following commands:
# Unregister-Event FileCreated
# Unregister-Event HashMapClear
私はするつもりです今これを試してみてください。コードを読むことは、$ f形式で指定した数のフォルダで動作しますか?私は$ f3、$ f4、$ f5など? – Hitmand
関数を使用するという考えは、任意の数のフォルダを監視できるということです。上記の$ f1と$ f2は変数名です。これは、スクリプトの後の時点で(必要な場合)フォルダの監視を停止できるようにするためのものです。お詫び申し上げます、これらの変数は少し良くなりました:) –
filesystemwatcherが既に登録されているというエラーを取得しています。私はあなたがこの方法で複数のフォルダを渡すことはできないと思う。 – Hitmand