我想在启动时在后台运行Windows 2012 Server上的PowerShell脚本执行以下操作:
DoScan.exe
)我已经找到了一些代码并为此构建了一个框架,但我遇到了各种各样的问题。首先,PowerShell脚本在运行不到10秒后退出。然而,在ISE中不断运行。其次,-WindowStyle Hidden
并不像我希望的那样发挥作用。我不希望用户直接知道脚本正在运行。第三(这可能更像赛门铁克的事情),我的“调用扫描”例程似乎注册为1次大扫描,而不是单独的文件扫描。
感谢任何指导。请解释为什么/为什么不起作用,如果我应该使用不同的语言,以及我是否应该将其分解为多个脚本。
$incomingfile = "E:\"
$filter = "*.*"
$watcher = New-Object IO.FileSystemWatcher $incomingfile, $filter -Property @{
IncludeSubdirectories = $true
NotifyFilter = [IO.NotifyFilters] 'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $watcher Created -SourceIdentifier FileCreated -Action {
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Even.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
foreach ($incomingfile in $watcher) {
& "C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\DoScan.exe" /ScanFile $path
}
}
答案 0 :(得分:0)
有几件事:
观察员行动的一个陈述中遗漏了t
:
$changeType = $Even.SourceEventArgs.ChangeType
# ^^
不应该有效果,因为你还是不使用那个变量。
观察程序仅在其父PowerShell进程运行时保持活动状态。
您的foreach
循环错误。观察者为每个创建的文件触发,因此删除循环并将命令直接放在动作脚本块中。
$onCreated = Register-ObjectEvent ... -Action {
$path = $Event.SourceEventArgs.FullPath
& "C:\Pro...can.exe" /ScanFile $path
}
您希望脚本执行SEP的所有操作都可以自行完成。根本没有必要用FileSystemWatcher
重新实现轮子。