Назад | Перейти на главную страницу

Развертывание / синхронизация Powershell .lnk - атрибут описания lnk

Я работал над сценарием синхронизации PowerShell, который будет использоваться для управления тем, что пользователи имеют на своем рабочем столе (в основном файлы lnk / ярлыков). В настоящее время он настроен для выполнения основных сравнений для добавления / удаления / обновления файлов, которые хранятся локально. Основная проблема, с которой я сталкиваюсь, заключается в том, что у меня нет хорошего способа различать развернутые ссылки и ссылки, созданные пользователем. В зависимости от того, как я синхронизирую файлы, у меня возникают проблемы.

Проблема 1. Если я принудительно синхронизирую местоположение клиента с сервером, все на рабочем столе стирается при каждом запуске скрипта.

Проблема 2: Если я не принудительно синхронизирую клиентскую сторону, когда я изменяю / удаляю файл, клиентская сторона сохраняет файлы.

Так что, если это имеет какой-то смысл, я надеюсь, что кто-то знает способ пометить файлы, которые я отправляю на локальный компьютер. Затем я мог бы создать свой сценарий, который будет искать этот флаг и влиять только на развернутые файлы.

Интересно, использует ли Get-Acl и Set-Acl в свойстве Group файлов было бы допустимым способом пометить файлы для ваших нужд.

Если все ваши машины используют диски в формате NTFS, вы можете использовать альтернативный поток данных для хранения сообщения, которое помечает ссылки, добавленные вашим скриптом.

Метод настраиваемого класса (PowerShell v2):

http://poshcode.org/1430

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)