重命名文件夹中的文件创build?

我需要find一种方法来自动重命名在Windows 2008r2文件服务器上的特定目录中创build的所有文件。 这需要或多或less地立即完成,所以我不可能每五分钟就有一次预定的工作。

我已经做了一些研究,发现我可以通过调度一个任务来触发WMI事件信号创build,但是我真的不知道如何开始,所以我需要一些指针。

要创build一个PS脚本来定位文件并重命名它将很容易,但是我真的不知道如何触发正确事件的脚本。

首先,在pipe理工具 – >本地安全策略 – >本地策略 – >审计策略 – >审计对象访问中启用文件审计。

在这里,你想同时启用FailureSuccess

在这里输入图像说明

之后,右键单击要创build文件夹的文件夹,然后转到“属性”中的“高级”。 你将有一个选项卡Auditing 。 为所有用户添加并检查所有选项(成功)

在这里输入图像说明

然后,在文件夹中创build一个文件夹,并打开eventvwr 。 在这里,您将在Audit-logs中看到一个用于创build文件夹的条目。 右键单击它并在其上添加一个操作。

在这里输入图像说明

作为任务,你可以启动PowerShell.exe和作为参数,你可以提供你的脚本:

 .\MyScript.ps1 -eventRecordID $(eventRecordID) -eventChannel $(eventChannel) 

(如果你不会和他们做任何事情,你不需要传递这些论据)

我从来没有尝试过,但PowerShell包包括一个FileSystemWatcher可以触发您的警报监视器。 看到这个线程的例子用法。

您的powershell脚本显然需要不断运行。

但是,对于任何触发器系统而言,最大的问题之一就是通常会在文件创build开始的时候收到通知,而不是在完成时才会收到通知,所以当您尝试重命名文件时,您的文件可能仍然在使用中。 为了解决这个问题,你的触发器代码可能需要检查重命名是否成功,并且每隔一段时间都要经常尝试,直到它出现为止。

您还需要小心如何创build文件。 例如,我已经看到了一些程序,首先创build文件,如filename.ext.temp,当完成后,他们将文件重命名为正确的名称,即filename.ext。 在这种情况下,你并不是真的想监视文件的创build,而是重命名。

我有一个考虑过,但我更喜欢TiZon 。 这是我后来发现的代码,但它的需要消失了,所以我从来没有真正使用它。

 ' VBScript source code strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\cimv2") Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ ("Select * From __InstanceCreationEvent Within 5 Where " _ & "Targetinstance Isa 'CIM_DirectoryContainsFile' and " _ & "TargetInstance.GroupComponent= " _ & "'Win32_Directory.Name=""c:\\\\scripts""'") Do Set objLatestEvent = colMonitoredEvents.NextEvent Wscript.Echo objLatestEvent.TargetInstance.PartComponent Loop 

来自CodeProject 。