У меня есть код, который использует файловую систему для отслеживания папки в пути.
Мне нужен путь, который он отслеживает, чтобы изменить его на основе входных данных в двух полях, когда пользователь вводит их в графическом интерфейсе пользователя.И это, чтобы начать мониторинг при нажатии кнопки.
У меня есть графический интерфейс, который работает следующим образом для запуска файла .bat на основе заполнения этих двух полей.(Мне действительно нужен один и тот же графический интерфейс для запуска обоих одновременно, так как первый открывает файл и сохраняет что-то в папку, которую нужно отслеживать).
Кажется, я не могу получитьfilesystemwatcher для запуска одним и тем же кликом.
Я перепробовал все возможные способы объединить эти два для совместной работы, но без радости.Но поскольку я новичок в любом виде кодирования, я не знаю, что я делаю неправильно.
Это код наблюдателя файловой системы, который должен запускать файл .bat при обнаружении файла в папке.Папка 1 и папка 2 должны иметь возможность изменения в зависимости от ввода в графическом интерфейсе.
$folder = 'c:\Work\Folder1\Folder2\Destination'
$filter = '*.*'
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $true;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
Out-File -FilePath c:\temp\log\Filelog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
Set-Location "c:\Work\Folder1\Folder2\Destination"
Start-Process "c:\Work\Folder1\Folder2\Destination\PS_Run.bat"
}
Ниже показано, как работает существующий код (Run.bat) из графического интерфейса пользователя
$TextBox.multiline = $false
$TextBox.location = New-Object System.Drawing.Point(50,50)
$TextBox.size = New-Object System.Drawing.Size(400,50)
$TextBox.Font = 'Microsoft Sans Serif,10'
$TextBox2 = New-Object system.Windows.Forms.TextBox
$TextBox2.multiline = $false
$TextBox2.location = New-Object System.Drawing.Point(50,110)
$TextBox2.size = New-Object System.Drawing.Size(400,50)
$TextBox2.Font = 'Microsoft Sans Serif,10'
\Folder1\Folder2\
$($TextBox.text)\$($TextBox2.text)
$TextBox
до $($TextBox.text)
работает в одной ситуации, но не в другой, и мне нужно, чтобы они работали вместе.
Я получаю ошибку
New-Object : Exception calling ".ctor" with "2" argument(s): "The directory name O:\EU_CGI_Resources\IMS\Automation_Tes
ting\Scripting\MaxScript\Texture_change_1\$($TextBox.text)\$($TextBox2.text)\Production\3D_Files\export is invalid."
At O:\EU_CGI_Resources\IMS\Automation_Testing\Scripting\Sctips_WIP\Watch_Path_Test.ps1:14 char:8
+ $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{I ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
Register-ObjectEvent : Cannot bind argument to parameter 'InputObject' because it is null.
At O:\EU_CGI_Resources\IMS\Automation_Testing\Scripting\Sctips_WIP\Watch_Path_Test.ps1:16 char:22
+ Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Acti ...
+ ~~~~
+ CategoryInfo : InvalidData: (:) [Register-ObjectEvent], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RegisterObj
ectEventCommand
Register-ObjectEvent : Cannot bind argument to parameter 'InputObject' because it is null.
At O:\EU_CGI_Resources\IMS\Automation_Testing\Scripting\Sctips_WIP\Watch_Path_Test.ps1:26 char:22
+ Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Acti ...
+ ~~~~
+ CategoryInfo : InvalidData: (:) [Register-ObjectEvent], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RegisterObj
ectEventCommand