0

次の PowerShell スクリプトがありますが、思ったほどうまくいきません。ソース フォルダ ($folder) に新しく作成されたファイルをコピー先フォルダ ($DestFolder) にコピーしたいのですが、ファイルがコピーされません。誰が何が間違っているのか分かりますか?

$SourceFolder = 'd:\temp\' # Enter the root path you want to monitor.
$folder = 'd:\temp' # Enter the root path you want to monitor.
$Destfolder = 'd:\temp2\' # Enter the root path you want to monitor.
$global:MySourceFolder = 'd:\temp\' # Enter the root path you want to monitor.
$global:MyDestfolder = 'd:\temp2\' # Enter the root path you want to monitor.
$filter = '*.*'  # You can enter a wildcard filter here.

# In the following line, you can change 'IncludeSubdirectories to $true if required.                          
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}


Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
#Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
Write-Host "path :  $MyDestfolder$name" -fore green
Copy-Item (Join-Path $MySourceFolder $name) ($Destfolder)
Out-File -FilePath d:\temp\filechange\outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}
4

1 に答える 1

0

意図したとおりに機能していると思います。コピーが実際にアクションの一部である場合は、その行をアクション スクリプト ブロック内に移動してみてください。

ObjectEvent には独自のスコープがあるため、変数 $name はアクション スクリプト ブロックの外では空です。Action スクリプトブロックの外部からこの変数にアクセスする必要がある場合は、$global:name を使用して変数を宣言できます。

以下は実際に機能するはずです(これに置き換えますが、コードのコピーを保存して、最初にバックアップを取得してください)

$folder = 'd:\temp'
$Destfolder = 'd:\temp2'
$filter = '*.*'

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

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated

    Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
    Copy-Item -Path (Join-Path $folder $name) -Destination $Destfolder
    Out-File -FilePath "d:\temp\filechange\outlog.txt" -Append -InputObject "The file '$name' was $changeType at $timeStamp"
}
于 2015-02-16T10:10:10.603 に答える