Скрипт изменения содержимого ярлыка.

Данный скрипт позволяет вносить исправления в ярлыки. Это может потребоваться в том случае, если объект, на который ссылался ярлык, по каким-то причинам «перехал» и ссылка стала недействительной. Или для приведения ярлыков к общему стандарту, так, например, в нашей организации пользователи использовали ярлыки ссылающиеся на одни и те же документы в расшаренных папках двумя разными способами: \\servername\sharename\filename и \\DFSRoot\sharename\filename из-за чего возникали проблемы с относительными ссылками в документах Excel (из-за того, что база гиперссылки, не заданная явным образом, зависила от пути к документу при его открытии).



Ну, а теперь сам скрипт:

 
[-NewValue ] [-Directory2Check ]
 
.SYNOPSIS
Выполняет проверку содержимого ярлыков на соответствие regex-шаблону
 
.PARAMETER What2Find
regex-шаблон
 
.PARAMETER Directory2Check
Одна или несколько директорий, в которых будет произведен поиск ярлыков
 
.PARAMETER NewValue
Новое значение, которое заменит найденную подстроку
 
.DESCRIPTION
Этот скрипт предназначен для поиска ярлыков, чьи поля TargetPath или
WorkingDirectory соответствуют regex-шаблону, заданному параметром What2Find
Скрипт находит все ярлыки в папке или папках (а так же в любых их подпапках),
заданных параметром Directory2Check. Если параметер Directory2Check не был задан 
при запуске скрипта, то поиск будет производится на "Рабочем столе" и в "Моих документах"
текущего пользователя. Затем скрипт проверит на соответствие шаблону 2 поля каждого ярлыка:
TargetPath и WorkingDirectory. Если содержимое этих полей соответствует шаблону What2Find,
то на экран будет выведено соответствующее сообщение
 
.EXAMPLE
.\ShortCutsChange.ps1 -What2Find .*terminal.* -Directory2Check H:\users
 
.EXAMPLE
    .\ShortCutsChange.ps1  -What2Find "servername" -NewValue "domain.local\dfs_root" -Directory2Check "D:\profiles\username.V2"
#>
#
param ($What2Find, $NewValue, $Directory2Check)
#
cls
#Вкл/выкл отладочных сообщений
$VerbosePreference="SilentlyContinue"#"Continue"
if ($What2Find) {
#Если $Directory2Check не передали в качестве параметра, то поиск будет происходить
#на "Рабочем столе" пользователя и папке "Мои документы"
if (!$Directory2Check) {
$DesktopDirectory=[System.Environment]::GetFolderPath('DesktopDirectory')
$Personal=[System.Environment]::GetFolderPath('Personal')
$Directory2Check=@($DesktopDirectory,$Personal)
}
#
#Создаем COM-объект Shell для доступа к свойствам ярлыков
$Shell = New-Object -COM WScript.Shell
#Рекурсивно получим перечень всех файлов с расширением *.lnk и *.url, находящихся в папках $Directory2Check
$Directory2Check| dir -Recurse -Force -Include *.url, *.lnk | select -ExpandProperty FullName | foreach{
#Сохраним в переменной объект для текущего файла .lnk
$Shortcut = $Shell.CreateShortcut($_)
Write-Verbose "ShortCut full name`t:`t$_"
Write-Verbose "ShortCut target path`t:`t$($Shortcut.TargetPath)"
Write-Verbose "Shortcut Working Directory`t:`t$($Shortcut.WorkingDirectory)"
#Если TargetPath соответствует заданой маске - информируем пользователя
if ($Shortcut.TargetPath -match $What2Find) {
Write-Host "Найдено совпадение для шаблона `"$What2Find`" в ShortCut.TargetPath= $($Shortcut.TargetPath)"
Write-Host "Ярлык= $_`n" -ForegroundColor Green
            if ($NewValue) {
                $Shortcut.TargetPath = $Shortcut.TargetPath -replace $What2Find, $NewValue
                Write-Host "Меняем на $($Shortcut.TargetPath) `n`n" -ForegroundColor DarkGray
                $Shortcut.Save()
            }
}
#Если WorkingDirectory соответствует заданой маске - информируем пользователя
if ($Shortcut.WorkingDirectory -match $What2Find) {
Write-Host "Найдено совпадение для шаблона `"$What2Find`" в ShortCut.WorkingDirectory= $($Shortcut.WorkingDirectory)"
Write-Host "Ярлык= $_`n" -ForegroundColor Green
            if ($NewValue) {
                $Shortcut.WorkingDirectory = $Shortcut.WorkingDirectory -replace $What2Find, $NewValue
                Write-Host "Меняем на $($Shortcut.WorkingDirectory) `n`n" -ForegroundColor DarkGray
                $Shortcut.Save()
            }
}
}
}
else {
Write-Host "Ошибка! Не задан обязательный параметр What2Find"
}

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.