【问题标题】:Monitor folder on remote PC for changed files监视远程 PC 上的文件夹以查找更改的文件
【发布时间】:2018-03-23 20:27:14
【问题描述】:

我在我们网络中的 PC 上有一个测量设备。这台电脑没有加入域,但是有一个共享文件夹,我有一个用户名和密码。

我正在尝试构建一个 Powershell 脚本来监控此文件夹从远程服务器,对于新的 CSV 文件,该脚本会将文件复制到指定的文件夹位置。我正在努力将参数传递给 FileSystemWatcher cmdlet。

有什么想法吗?

$folder = '\\remoteip\folder\subfolder'# <--'<full path to the folder to watch>'
$filter = '*.csv'
$destination = '\\mynetworkstorage\folder\' # <--' Where is the file going?

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $true              # <-- set this according to your requirements
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
} 
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    $path = $Event.SourceEventArgs.FullPath
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "The file '$name' was $changeType at $timeStamp"
    Copy-Item $path -Destination $destination -Force -Verbose
}

编辑 - 该脚本将从加入我们域的服务器运行,因此需要将凭据传递到文件夹才能访问它。我有这些凭据。

【问题讨论】:

    标签: powershell scripting credentials


    【解决方案1】:

    我对代码做了一点重构(主要是为了更容易理解):

    $folder = '\\localhost\c$\tmp'
    $filter = '*.*'
    $destination = '\\localhost\c$\tmp_destination\' 
    
    $fsw = New-Object IO.FileSystemWatcher
    $fsw.Path = $folder
    $fsw.Filter = $filter
    $fsw.IncludeSubdirectories = $true
    $fsw.EnableRaisingEvents = $true  
    $fsw.NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
    
    $action = { 
        $path = $Event.SourceEventArgs.FullPath
        $name = $Event.SourceEventArgs.Name
        $changeType = $Event.SourceEventArgs.ChangeType
        $timeStamp = $Event.TimeGenerated
        Write-Host "The file '$name' was $changeType at $timeStamp"
        Copy-Item $path -Destination $destination -Force -Verbose    
    }  
    
    $created = Register-ObjectEvent $fsw Created -Action $action
    
    while ($true) {sleep 1}
    

    我在本地运行此代码并设法将在$folder 创建的文件自动复制到$destination

    FileSystemWatcher 在当前用户的上下文中运行。在访问需要登录的远程系统的情况下,需要模拟。

    如果远程系统只有本地用户,没有源系统可以登录的域用户,那么模拟似乎是不可能的。

    有关模拟的更多详细信息,请参阅 thisthis 链接。

    【讨论】:

    • 谢谢金。重构没有问题,当然看起来更干净。但是,我的关键要求是使用不同的凭据连接到此远程文件夹。该文件夹位于未加入域的远程 PC 上(但我们可以使用不同的凭据远程访问共享文件夹)。
    • 现在我明白了问题所在。我没有找到任何简单的方法来做到这一点。但是看看stackoverflow.com/questions/7118961/…gallery.technet.microsoft.com/scriptcenter/… 作为参考实现。简而言之,FileSystemWatcher 似乎与任何用户无关,它运行在当前用户的上下文中。因此,如果它需要在其他用户的上下文中运行,则需要模拟该其他用户。
    • 但是,以上链接假定您可以以该用户身份登录。如果用户仅作为本地用户存在于远程系统上,那么这种方法似乎行不通。
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多