【问题标题】:System.IO.FileSystemWatcher and mapped network drivesSystem.IO.FileSystemWatcher 和映射的网络驱动器
【发布时间】:2020-08-26 15:35:47
【问题描述】:

我使用以下 PowerShell 脚本监控新创建文件的映射驱动器并将这些更改写入 csv 文件。

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = 'Z:\'
$action = 
{
    $path = $event.SourceEventArgs.FullPath
    $changetype = $event.SourceEventArgs.ChangeType
    Write-output "$path was $changetype at $(get-date)" >> C:\temp\HostFileList.csv
    
}


Register-ObjectEvent $watcher 'Created' -Action $action
 
Get-EventSubscriber

while($true){ sleep -seconds 1 }

我运行此脚本的计算机被多个用户大量使用。每个用户将使用自己的配置文件登录计算机,单击桌面批处理文件以映射网络驱动器文件夹并将他们的工作保存在那里。我的脚本在本地组策略中设置为在启动时运行。据我所知,脚本在后台运行并监听映射的驱动器文件夹没有任何问题。我的问题是脚本拒绝将输出文件写入指定位置。如果我手动运行脚本,它会很好地创建输出文件。此外,当我在启用本地 GP 启动脚本的情况下手动运行脚本时,我的文件中有两个条目,这让我相信脚本在本地 GP 上运行良好。谁能告诉我为什么我的脚本在我手动运行时会创建输出文件,而不是在启动时运行时?非常感谢任何反馈。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    至于这个……

    Write-output 
    

    Write-Output (Microsoft.PowerShell.Utility)

    将指定的对象发送到管道中的下一个命令。如果 该命令是管道中的最后一个命令,对象是 显示在控制台中。

    使用文件 cmdlet

    Export-Csv
    Out-File
    

    ... 和 -append 参数。因此,请收集您的属性并通过管道传输到其中之一。

     | Export-Csv -Path 'C:\temp\HostFileList.csv' -Append -NoTypeInformation
    

    Export-Csv (Microsoft.PowerShell.Utility)

    将对象转换为一系列逗号分隔值 (CSV) 字符串 并将字符串保存到文件中。

    $AppService = (Get-Service -DisplayName *Application* | Select-Object -Property DisplayName, Status)
    $AppService | Export-Csv -Path .\Services.Csv -NoTypeInformation
    Get-Content -Path .\Services.Csv
    $WinService = (Get-Service -DisplayName *Windows* | Select-Object -Property DisplayName, Status)
    $WinService | Export-Csv -Path ./Services.csv -NoTypeInformation -Append
    Get-Content -Path .\Services.Csv
    
    "DisplayName","Status"
    "Application Layer Gateway Service","Stopped"
    "Application Identity","Running"
    "Windows Audio Endpoint Builder","Running"
    "Windows Audio","Running"
    "Windows Event Log","Running"
    

    Out-File (Microsoft.PowerShell.Utility) - PowerShell

    将输出发送到文件。

    -Append 将输出添加到现有文件的末尾。

    【讨论】:

    • 谢谢。我将尝试使用文件 cmdlet 并跟进我的结果。
    • 别担心,很高兴这一切都为你解决了。保重。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多