读取并运行网络文件夹中的Select-String cmdLet,写入本地文件夹

时间:2018-09-26 10:05:20

标签: powershell access-rights powershell-core

终于让我的脚本按预期工作了。希望最后一个问题是我仅对网络驱动器具有读取权限。没关系,因为它在操作中是至关重要的地方。这使我想将输出写到本地文件夹,而不尝试删除原始文件。

$encoding = [System.Text.Encoding]::GetEncoding(1252)
$filter  = 'M:\ALM.\*.alm'
$pattern = "ASE|MBE|MB1|Network interfaces|Handle|default collector|Proficy|Recovered|AlmODBC|Close Digital Point|DataBlock|Channel|Record|TESTBOOL|OK|OPC|Item|_COMMCHECK_|SYSTEM|ADMINISTRATOR|Unknown|ItemID|Field's|Connection|hutdown|acknowledged|Alarming|Suspended|primary|SAC|reloaded|Fix32|1601-01-01"

(Select-String -encoding $encoding -Path $filter -Pattern $pattern -NotMatch) |
    ForEach-Object -Begin {Remove-Item $filter} -Process {
      $_.line | Out-File -Append -Encoding $encoding $_.filename 
    }

我不了解如何制作此零件:{$_.line | Out-File -Append -Encoding $encoding $_.filename } 将结果附加到具有相同名称的新 local 文件中,并保留原始文件,以免被读取。和平!

更新: 我的问题是第二条评论帮助我解决了什么:在Out-File调用中构造一条本地路径。我用$_.filename取代了(Join-Path $LocalDir $_.filename),就做到了。

该脚本可以完美运行,但是仍然尝试删除(或只是编辑?)网络文件夹文件。使终端的每个文件都呈红色亮起。

更新: 更正了此问题,删除了整个-Begin {Remove-Item $filter}部分。

-您所有的基地都属于我们

0 个答案:

没有答案