Я работал над сценарием синхронизации PowerShell, который будет использоваться для управления тем, что пользователи имеют на своем рабочем столе (в основном файлы lnk / ярлыков). В настоящее время он настроен для выполнения основных сравнений для добавления / удаления / обновления файлов, которые хранятся локально. Основная проблема, с которой я сталкиваюсь, заключается в том, что у меня нет хорошего способа различать развернутые ссылки и ссылки, созданные пользователем. В зависимости от того, как я синхронизирую файлы, у меня возникают проблемы.
Проблема 1. Если я принудительно синхронизирую местоположение клиента с сервером, все на рабочем столе стирается при каждом запуске скрипта.
Проблема 2: Если я не принудительно синхронизирую клиентскую сторону, когда я изменяю / удаляю файл, клиентская сторона сохраняет файлы.
Так что, если это имеет какой-то смысл, я надеюсь, что кто-то знает способ пометить файлы, которые я отправляю на локальный компьютер. Затем я мог бы создать свой сценарий, который будет искать этот флаг и влиять только на развернутые файлы.
Интересно, использует ли Get-Acl
и Set-Acl
в свойстве Group файлов было бы допустимым способом пометить файлы для ваших нужд.
Если все ваши машины используют диски в формате NTFS, вы можете использовать альтернативный поток данных для хранения сообщения, которое помечает ссылки, добавленные вашим скриптом.
Метод настраиваемого класса (PowerShell v2):
COM-метод:
http://groups.google.de/group/microsoft.public.windows.powershell/msg/66697a0aba7ab9ec
Другой вариант - написать сообщение в какой-нибудь неиспользуемый элемент метаданных. Вот пример использования библиотеки TagLib в PowerShell:
http://huddledmasses.org/editing-media-tags-from-powershell/
Вот еще один пример использования COM, но код делает много вещей, которые могут быть выполнены стандартными командами PowerShell:
http://www.vistax64.com/powershell/70760-accessing-metadata.html
Сосредоточьтесь на использовании этих строк:
$shellApp = new-object -com shell.application
$myFolder = $shellApp.Namespace($dir)
$fileobj = $myFolder.Items().Item($file)
...
$v = $myFolder.GetDetailsOf($fileobj,$i)