Guest User

Test-ShortcutTargetPath

a guest
Nov 20th, 2018
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Test-ShortcutTargetPath
  2. {
  3.     <#
  4.     .SYNOPSIS
  5.     Проверка ярлыков
  6.     .DESCRIPTION
  7.     Функция для проверки путей в поле Объект в ярлыках
  8.     .PARAMETER Lnks
  9.     System.String[] - Полный путь к ярлыку/массив путей
  10.     .INPUTS
  11.     System.String[] - Полный путь к ярлыку/массив путей
  12.     .OUTPUTS
  13.     [PSCustomObject] - с полями:
  14.         FilePath        - Путь к ярлыку
  15.         TargetPath      - Путь в поле Объкт ярлыка
  16.         TargetExists    - True, если путь из поля Объект найден, иначе False
  17.         IsUNC           - True, если путь из поля Объект UNC, иначе False
  18.     .EXAMPLE
  19.     $Directories =
  20.     @(
  21.         "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Windows PowerShell"
  22.         "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\System Tools"
  23.     )
  24.  
  25.     Get-ChildItem -Path $Directories -Recurse -Filter "*.lnk" |
  26.         Test-ShortcutTargetPath |
  27.         Format-List
  28.     ---
  29.     Проверка пути в поле Объект, у ярлыков находящихся в папках, в меню Пуск:
  30.     Windows PowerShell и System Tools
  31.     .NOTES
  32.     Автор:          iNNOKENTIY21
  33.     #>
  34.  
  35.     param
  36.     (
  37.         [Parameter(Mandatory,
  38.             ValueFromPipeline,
  39.             ValueFromPipelineByPropertyName)]
  40.         [ValidateNotNullOrEmpty()]
  41.         [string[]]
  42.         [Alias("FullName")]
  43.         $Lnks
  44.     )
  45.  
  46.     begin {$WSH = New-Object -ComObject WScript.Shell}
  47.  
  48.     process
  49.     {
  50.         foreach ($Lnk in $Lnks)
  51.         {
  52.             if (-not (Test-Path -Path $Lnk))
  53.             {
  54.                 "$Lnk не найден."
  55.                 continue
  56.             }
  57.  
  58.             $Shortcut = $WSH.CreateShortcut($Lnk)
  59.  
  60.             $TargetExists = ($Shortcut.TargetPath -ne "" -and
  61.                 (Test-Path $Shortcut.TargetPath))
  62.  
  63.             $IsUNC = $Shortcut.TargetPath.StartsWith("\\")
  64.  
  65.             [PSCustomObject]@{
  66.                 FilePath     = $Lnk
  67.                 TargetPath   = $Shortcut.TargetPath
  68.                 TargetExists = $TargetExists
  69.                 IsUNC        = $IsUNC
  70.             }
  71.         }
  72.     }
  73. }
  74.  
  75. #Пример:
  76. $Directories =
  77. @(
  78.     "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Windows PowerShell"
  79.     "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\System Tools"
  80. )
  81.  
  82. Get-ChildItem -Path $Directories -Recurse -Filter "*.lnk" |
  83.     Test-ShortcutTargetPath |
  84.     Format-List
  85.  
  86. #Пример:
  87. "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\System Tools\Administrative Tools.lnk" |
  88.     Test-ShortcutTargetPath |
  89.     Format-List
  90.  
  91. #Пример:
  92. Test-ShortcutTargetPath "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\System Tools\Administrative Tools.lnk" |
  93.     Format-List
Advertisement
Add Comment
Please, Sign In to add comment