2015-02-16 4 views
0

У меня есть следующий сценарий powershell, который не совсем работает, как я думал. Я хочу скопировать новый созданный файл в исходную папку ($ folder) в папку назначения ($ DestFolder), но файл не скопирован. Кто-нибудь видит, что может быть неправильным?копия в powershell не работает, как предполагалось

$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"} 

ответ

0

Я считаю, что он работает по назначению. Если копия фактически является частью действия, попробуйте переместить эту строку внутри блока сценария действия.

Переменная $ name пуста вне скрипта action, поскольку ObjectEvent имеет свою собственную область. Если вам нужно получить доступ к этой переменной извне скриптового блока 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" 
} 
+0

Спасибо, я пропустил часть действия, но после того, как я поместил его в действии и пробовал это ... Write-Host "путь: $ folder $ name" -fore green Я вижу, что фактический путь к папке $ пуст по какой-то причине, поэтому должно быть, почему экземпляр-элемент не работает, но я не знаю, почему .. – MTplus

+0

$ name не пуст, переменная $ folder пуста. – MTplus

+0

Это не имеет смысла для меня ... Вы не сможете создать файловую системуww атер-объект без правильного пути. Кстати, чтобы получить путь, который вы ожидаете в своем записывающем узле, вы должны добавить «\» между ними; например, «$ folder \ $ name» – notjustme

Смежные вопросы