у меня есть сумасшедшие сетевые администраторы, которые всегда меняют путь UNC к моему рабочему каталогу. Используя пример домена, чтобы проиллюстрировать изменения, я клянусь, что видел, по крайней мере, эти четыре разных UNCs в одном каталоге и файлах за последние 6 месяцев:
\contoso\Projects\rhinoexhibit\
\contoso\Design\Projects\rhinoexhibit\
\contoso.com\Design\Projects\rhinoexhibit\
\city.contoso.com\Departments\Design\Projects\rhinoexhibit\
\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\
я тоже пользуюсь .LNK-файлов, что оба прямую ссылку на файл в поле "Объект":
\contoso\Projects\rhinoexhibit\rhinospecifications.pdf
и .Файлы LNK, которые ссылаются на приложение, чтобы открыть файл с определенными параметрами (здесь я использую Foxit Читатель, чтобы открыть файл PDF на определенную страницу) в поле цель:
"C:\Program Files (x86)\FOXIT READER\Foxit Reader.exe" /A page=37 "\contoso\Projects\rhinoexhibit\rhinospecifications.pdf"
эти каталоги находятся на корпоративных сетевых акциях, и у меня нет доступа, чтобы изменить UNC на акции или использовать любой вид перенаправления, поэтому модификация ответа Терренса сработала лучше всего для меня. Поскольку я был новичком в PowerShell, мне пришлось выяснить, как использовать его, поэтому я дам пошаговые инструкции о том, как использовать мою модификацию своего отличного сценария:
- используя Блокнот, вставьте приведенный ниже код в новый текстовый документ. Сохраните документ как Edit-LNK-files.ps1 в каталог, который легко найти и ввести (например C:\MyPowerShells)
- в блокноте, отредактируйте
$oldString
параметр (строка 4), содержащий строку, которую вы хотите найти
а то $newString
параметр (строка 7), содержащий нужную строку
чтобы заменить его. Отредактируйте $searchPath
параметр (строка 10) для указания
каталог, в котором вашему .Файлы LNK для редактирования проживать.
кроме того, вы можете указать эти переменные позже, как вы хотите, запустив сценарий из командной строки PowerShell и редактирования параметров (т. е. & "C:\MyPowerShells\Edit-LNK-files.ps1" -oldString E:\ -newString D:\ -searchPath "C:\My LNKs\"
- запуск Windows Powershell от имени администратора: Пуск > Все программы > Стандартные > Windows PowerShell, щелкните правой кнопкой мыши Windows PowerShell и выберите Запуск от имени администратора
- в Powershell введите
set-executionpolicy remotesigned
и нажимаем Enter
- тип
Y
и нажмите Enter, чтобы разрешить PowerShell для запуска сценария, созданного в блокноте (может потребоваться изменить его после завершения работы, чтобы обеспечить безопасность системы).
- тип
& "C:\MyPowerShells\Edit-LNK-files.ps1"
- нажмите Enter, чтобы выполнить "сухой пробег" (отличная идея Терренс! но я поменял это на дефолтное)
- обзор выходных от "сухого хода" ... а пути правильно? Если нет, измените
$newString
и $oldString
переменные соответствующим образом, затем повторите шаги 6-8, чтобы повторить сухой прогон. Othewise, перейдите к шагу 9.
- если сухой прогон выглядит хорошо, повторите шаг 6, но на этот раз добавьте параметр-RealRun, чтобы он выглядел как
& "C:\MyPowerShells\Edit-LNK-files.ps1" -RealRun
. Теперь, когда вы нажмете Enter, это будет на самом деле изменить .LNK файлы
вот отредактированный скрипт:
[CmdletBinding()]
Param(
[Parameter(Mandatory=$False,Position=1)]
[string] $oldString="\contoso\Projects\rhinoexhibit\",
[Parameter(Mandatory=$False,Position=2)]
[string]$newString="\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\",
[Parameter(Mandatory=$False,Position=3)]
[string]$searchPath="C:\My LNKs\",
[switch]$RealRun
)
$shell = new-object -com wscript.shell
$filesFound= 0
if ( $RealRun ) {
write-host "Executing real run" -foregroundcolor red -backgroundcolor black
} else {
write-host "Executing dry run" -foregroundcolor green -backgroundcolor black
}
dir $searchPath -filter *.lnk -recurse | foreach {
$lnk = $shell.createShortcut( $_.fullname )
$oldPath= $lnk.targetPath
$oldArgs= $lnk.Arguments
$lnkRegex = ",*" + [regex]::escape( $oldString )
if ( $oldPath -match $lnkRegex ) {
$newPath = $oldPath -replace $lnkRegex, $newString
write-host "Found: " $_.fullname -foregroundcolor yellow -backgroundcolor black
write-host " Replace: " $oldPath
write-host " With: " $newPath
$filesFound++
if ( $RealRun ) {
$lnk.targetPath = $newPath
$lnk.Save()
}
}
if ( $oldArgs -match $lnkRegex ) {
$newArgs = $oldArgs -replace $lnkRegex, $newString
write-host "Found: " $_.fullname -foregroundcolor yellow -backgroundcolor black
write-host "Target: " $oldPath -foregroundcolor yellow -backgroundcolor black
write-host " Replace Args: " $oldArgs
write-host " With Args: " $newArgs
$filesFound++
if ( $RealRun ) {
$lnk.Arguments = $newArgs
$lnk.Save()
}
}
}
if ($filesFound -eq 0) {
write-host "No LNK files found with " $oldString "in target or arguments" -foregroundcolor red -backgroundcolor black
}
else {
if ($RealRun) {
write-host $filesFound "files found and edited" -foregroundcolor red -backgroundcolor black
}
else {
write-host $filesFound "files found" -foregroundcolor green -backgroundcolor black
}
}
запуск этого сценария должен успешно измениться .LNK shortuct файлы со следующим в целевой: box
\contoso\Projects\rhinoexhibit\rhinospecifications.pdf
to
\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\rhinospecifications.pdf
и от
"C:\Program Files (x86)\FOXIT READER\Foxit Reader.exe" /A page=37 "\contoso\Projects\rhinoexhibit\rhinospecifications.pdf"
to
"C:\Program Files (x86)\FOXIT READER\Foxit Reader.exe" /A page=37 "\city.contoso.com\Departments\AlphaDesignGroup\Projects\rhinoexhibit\rhinospecifications.pdf"