Obtenir les cibles des raccourcis
Bonjour,
J'ai un script qui parcourt tous les dossiers et les raccourcis contenus dans un emplacement
Code:
Get-ChildItem -Path "." -force -recurse | Where-Object {$_.PSIsContainer -eq $true -or $_.Extension -eq ".lnk"} | Select-Object FullName|
J'ai 2 questions distinctes:
1. Comment obtenir une liste avec la cible pour chaque raccourci?
Citation:
ex: "MonDossierRaccourci.lnk" --> cible = "c:\blabla\Mon dossier\"
2. Y aurait-il un moyen facile de distinguer des raccourcis de Dossier et des raccourcis de Fichier?
Si nécessaire, je peux couper mon code en 2 parties:
Un script qui liste tous les dossier
Code:
Get-ChildItem -Path "." -force -recurse | Where-Object {$_.PSIsContainer -eq $true} | Select-Object FullName|
Un autre qui liste les lnk et leur cible
Code:
Get-ChildItem -Path "." -force -recurse | Where-Object {$_.Extension -eq ".lnk"} | Select-Object FullName|
Merci d'avance pour aide :)
Raccourcis et leurs cibles
:salut:
Voici un exemple de script PowerShell qui affiche les Raccourcis et leurs cibles dans un Out-Gridview à partir de votre bureau
Code:
1 2 3 4 5 6 7 8 9 10 11
| $MyPath = "$Env:userprofile\desktop"
Get-ChildItem -Path $MyPath -Force -Recurse |
Where-Object { !$_.PSIsContainer -and $_.Extension -eq ".lnk" } |
ForEach-Object {
$shell = New-Object -ComObject WScript.Shell
$link = $shell.CreateShortcut($_.FullName)
[PSCustomObject]@{
'Shortcut Name' = $_.Name
'Target Path' = $link.TargetPath
}
} | Out-GridView -Title "Raccourcis et leurs cibles" |
:king:
Script PowerShell de Gestion des Raccourcis
:salut:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| <#
Description du Script PowerShell de Gestion des Raccourcis :
Ce script PowerShell permet d'analyser et de gérer les raccourcis présents dans un répertoire spécifique, tel que le bureau de l'utilisateur et tous les utilisateurs aussi.
Il affiche une interface utilisateur conviviale pour visualiser les différents types de raccourcis (dossiers, fichiers ou liens Internet) ainsi que leurs cibles.
Fonctionnalités principales :
1-Analyse Automatique : Le script explore le répertoire spécifié pour repérer les fichiers de type raccourci (.lnk) et liens Internet (.url).
2-Affichage dans une Grille : Une interface graphique est générée à l'aide de la commande Out-GridView, permettant à l'utilisateur de voir tous les raccourcis disponibles, leurs types et leurs cibles.
3-Actions sur les Raccourcis : L'utilisateur peut sélectionner un raccourci dans la grille et effectuer des actions correspondantes :
-Ouvrir un dossier cible dans l'explorateur de fichiers.
-Exécuter un fichier cible.
-Ouvrir un lien Internet dans le navigateur par défaut.
4-Boucle de Répétition : Une boucle est intégrée pour permettre à l'utilisateur de parcourir plusieurs fois la liste des raccourcis sans avoir à redémarrer le script.
Ce script offre une solution simple et efficace pour explorer et interagir avec les raccourcis présents dans un répertoire donné, ce qui peut être utile pour gérer les raccourcis sur le bureau ou dans d'autres emplacements système.
#>
function Afficher-Grille {
param (
[Parameter(Mandatory=$true)]
[System.Collections.ArrayList]$listeRaccourcis
)
$selectedItem = $listeRaccourcis | Out-GridView -Title "Gestion de types de Raccourcis et leurs Cibles" -PassThru
return $selectedItem
}
do {
Clear-Host
# Spécifiez le chemin du répertoire à examiner : exemple le bureau de l'utilisateur courant et aussi le bureau partagé
$chemin = @([Environment]::GetFolderPath("CommonDesktopDirectory"),[Environment]::GetFolderPath("Desktop"))
# Obtenez la liste de tous les fichiers dans le répertoire spécifié
$fichiers = Get-ChildItem -Path $chemin -Recurse
# Créez une liste pour stocker les informations sur les raccourcis
$listeRaccourcis = @()
# Parcourez chaque fichier pour identifier s'il s'agit d'un raccourci de dossier, de fichier, ou Internet
foreach ($fichier in $fichiers) {
# Vérifiez si le fichier est un raccourci ou un raccourci internet
if ($fichier.Extension -eq ".lnk" -or $fichier.Extension -eq ".url") {
# Utilisez la commande CreateShortcut pour accéder aux informations sur le raccourci
$shell = New-Object -ComObject WScript.Shell
$link = $shell.CreateShortcut($fichier.FullName)
# Initialisez la variable pour stocker les arguments
$arguments = $link.Arguments
# Initialisez la variable pour stocker les descriptions
$Desciption = $link.Description
# Initialisez la variable pour stocker les dossiers de travail
$WorkingDirectory = $link.WorkingDirectory
# Initialisez la variable pour stocker les icons
$Icon = $link.IconLocation
# Initialisez la variable pour stocker les touches de raccourci
$HotKey = $link.Hotkey
# Vérifiez si le chemin de la cible est un dossier
if (Test-Path $link.TargetPath -PathType Container) {
$type = 'Raccourci de dossier'
} else {
# Vérifiez si le fichier est un raccourci internet
if ($fichier.Extension -eq ".url") {
$type = 'Raccourci Internet'
} else {
$type = 'Raccourci de fichier'
}
}
# Vérifiez s'il y a des arguments et concaténez-les avec le chemin de la cible
if ($arguments -ne $null -and $arguments -ne '') {
$targetPath = "$($link.TargetPath) $arguments"
} else {
$targetPath = "$($link.TargetPath)"
}
# Ajoutez les informations sur le raccourci à la liste
$listeRaccourcis += [PSCustomObject]@{
'Type de Raccourci' = $type
'Nom de Raccourci' = $fichier.Name
'Chemin de la cible' = $targetPath
'Dossier de Travail' = $WorkingDirectory
'Arguments' = $arguments
'Description' = $Desciption
'Icon' = $Icon
'Touches de Raccourci' = $HotKey
}
}
}
# Affichez la liste dans Out-GridView
$selectedItem = Afficher-Grille -listeRaccourcis $listeRaccourcis
# Vérifiez si un élément a été sélectionné dans la grille
if ($selectedItem) {
# Vérifiez si le raccourci sélectionné est un raccourci Internet
if ($selectedItem.'Type de Raccourci' -eq 'Raccourci Internet') {
try {
# Lancez l'URL dans le navigateur par défaut
Start-Process $selectedItem.'Chemin de la cible'
Sleep 5
} catch {
Write-Host "Une erreur s'est produite lors de l'ouverture de l'URL."
}
} else {
# Ouvrez la cible du raccourci sélectionné
$shell = New-Object -ComObject WScript.Shell
$shortcutPath = $selectedItem.'Chemin de la cible'
# Vérifie si le raccourci est un dossier
if ($selectedItem.'Type de Raccourci' -eq 'Raccourci de dossier') {
$Exec = $shell.Run("explorer `"$shortcutPath`"", 1, $false)
Sleep 5
} else {
$Exec = $shell.Run("cmd /c `"$shortcutPath`"", 0, $false)
Sleep 5
}
}
} else {
# L'utilisateur a fermé la grille, sortir de la boucle
break
}
} while ($selectedItem) |
:king:
Folders-Files-Shortcuts.bat
:salut:
Ce script hybride [Batch-PowerShell] fournit à l'utilisateur une manière pratique de visualiser tous les éléments présents sur son bureau, en distinguant clairement entre les fichiers, les dossiers, les raccourcis de fichiers, les raccourcis de dossiers et les URL, tout en exportant également ces informations dans un fichier CSV pour une utilisation ultérieure.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| <# : Batch Script Section
@echo off & Mode 65,3
Set Title=Liste des Raccourcis,Fichiers et Dossiers. By [Hackoo] 2024
Title %Title%
setlocal
cd "%~dp0"
Color 1B & echo( & echo(
Echo( %Title%
set "__thisBatchFile=%~f0"
copy /y "%__thisBatchFile%" "%TEMP%\%~n0.ps1">NUL && powershell -NoProfile -ExecutionPolicy Bypass -File "%TEMP%\%~n0.ps1" %*
Del "%TEMP%\%~n0.ps1"
EndLocal & Exit
#>
<#
The Powershell Section
#>
Clear-Host
$MyPath = @([Environment]::GetFolderPath("CommonDesktopDirectory"),[Environment]::GetFolderPath("Desktop"))
$Files = Get-ChildItem -Path $MyPath -Force -Recurse
$Results = foreach ($File in $Files) {
switch -Wildcard ($File.Extension) {
".lnk" {
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($File.FullName)
$targetPath = $shortcut.TargetPath
$shell = $null
$shortcut = $null
if (Test-Path $targetPath -PathType Container) {$type = 'Folder Shortcut'} else { $type = 'File Shortcut'}
[PSCustomObject]@{
Type = $type
Path = $File.FullName
Target = $targetPath
Created = $File.CreationTime
}
break
}
".url" {
$content = Get-Content $File.FullName -Raw
$url = $content | Select-String -Pattern "URL=(.*)" | ForEach-Object { $($_.Matches.Groups[1].Value).Trim() }
[PSCustomObject]@{
Type = "URL"
Path = $File.FullName
Target = $url
Created = $File.CreationTime
}
break
}
default {
if ($File.PSIsContainer) {
[PSCustomObject]@{
Type = "Folder"
Path = $File.FullName
Created = $File.CreationTime
}
} else {
[PSCustomObject]@{
Type = "File"
Path = $File.FullName
Created = $File.CreationTime
}
}
break
}
}
}
# Afficher les résultats dans une grille
$Results | Out-GridView -Title "Liste des dossiers, Fichiers et raccourccis" -Wait
$Delimiter = (Get-Culture).TextInfo.ListSeparator
$CSV_File = ".\Folders-Files-Shortcuts.csv"
# Exporter les résultats vers un fichier CSV
$Results | Export-Csv -Path $CSV_File -NoTypeInformation -Delimiter $Delimiter -Encoding UTF8
ii $CSV_File |
:king: