Наконец-то у меня получается, что мой сценарий работает так, как задумано.Надеюсь, последняя проблема заключается в том, что у меня есть только доступ на чтение к сетевому диску.Это нормально, так как это довольно критичное место для работы. Вместо этого я хочу записать вывод в локальную папку, не пытаясь удалить исходные файлы.
$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
}
Что я не делаю подКак сделать эту часть: standart: {$_.line | Out-File -Append -Encoding $encoding $_.filename }
добавьте результат к новым локальным файлам с тем же именем и оставьте оригинал отдельно от чтения.Мир!
Обновление: моя проблема заключалась в том, что мне помог решить второй комментарий: создать локальный путь как часть вызова Out-File
.Я заменил $_.filename
на (Join-Path $LocalDir $_.filename)
, и он это сделал.
Скрипт работает отлично, но все равно пытается удалить (или просто отредактировать?) Файлы сетевой папки.Заставить терминал светиться красным для каждого файла.
Обновление: исправлено это удаление всей части -Begin {Remove-Item $filter}
.
- все ваши базы принадлежат нам