Bearbeiten Verknüpfung (.lnk) Eigenschaften mit Powershell
-
20-08-2019 - |
Frage
Ich habe einen fiesen VBS Weg gefunden, dies zu tun, aber ich bin für ein native Posh Verfahren suchen, um die Eigenschaften einer LNK-Datei zu bearbeiten. Ziel ist es, Remote-Computern zu erreichen, duplizieren Sie eine vorhandene Verknüpfung mit den meisten der richtigen Eigenschaften und bearbeiten Sie ein paar von ihnen.
Wenn es wäre nur einfacher sein, eine neue Verknüpfungsdatei zu schreiben, das wäre zu arbeiten.
Lösung
Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "C:\path\to\new\exe.exe" ## Make changes
$shortcut.Description = "Our new link" ## This is the "Comment" field
$shortcut.Save() ## Save
, um die VB-Version des Codes hier gefunden: http: // www.tutorialized.com/view/tutorial/Extract-the-target-file-from-a-shortcut-file-.lnk/18349
Andere Tipps
Im Folgenden sind die Funktionen, die ich mit LNK-Dateien für den Umgang verwenden. Sie sind modifizierte Versionen der Funktionen gefunden hier wie @Nathan Hartley erwähnt. Ich habe Get-Shortcut
verbessert Platzhalter wie *
zu behandeln Strings, indem dir
sie in Gruppen von Fileinfo-Objekten zu erweitern.
function Get-Shortcut {
param(
$path = $null
)
$obj = New-Object -ComObject WScript.Shell
if ($path -eq $null) {
$pathUser = [System.Environment]::GetFolderPath('StartMenu')
$pathCommon = $obj.SpecialFolders.Item('AllUsersStartMenu')
$path = dir $pathUser, $pathCommon -Filter *.lnk -Recurse
}
if ($path -is [string]) {
$path = dir $path -Filter *.lnk
}
$path | ForEach-Object {
if ($_ -is [string]) {
$_ = dir $_ -Filter *.lnk
}
if ($_) {
$link = $obj.CreateShortcut($_.FullName)
$info = @{}
$info.Hotkey = $link.Hotkey
$info.TargetPath = $link.TargetPath
$info.LinkPath = $link.FullName
$info.Arguments = $link.Arguments
$info.Target = try {Split-Path $info.TargetPath -Leaf } catch { 'n/a'}
$info.Link = try { Split-Path $info.LinkPath -Leaf } catch { 'n/a'}
$info.WindowStyle = $link.WindowStyle
$info.IconLocation = $link.IconLocation
New-Object PSObject -Property $info
}
}
}
function Set-Shortcut {
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
$LinkPath,
$Hotkey,
$IconLocation,
$Arguments,
$TargetPath
)
begin {
$shell = New-Object -ComObject WScript.Shell
}
process {
$link = $shell.CreateShortcut($LinkPath)
$PSCmdlet.MyInvocation.BoundParameters.GetEnumerator() |
Where-Object { $_.key -ne 'LinkPath' } |
ForEach-Object { $link.$($_.key) = $_.value }
$link.Save()
}
}
Ich glaube nicht, dass es eine native Art und Weise.
Es gibt dieses DOS util:. Shortcut.exe
Sie müssen noch die util auf dem Remote-System kopieren, dann ist es vielleicht nennen WMI über die Änderungen vornehmen, die Sie suchen.
Ich bin die einfachere Art und Weise zu denken sein wird überschrieben und / oder eine neue Datei erstellen.
Haben Sie den Zugriff auf diese Systeme über eine Remote-Freigabe?
Eine kurze neben @ JasonMArcher Antwort ..
Immobilien-Angebote Um zu sehen, die Sie gerade $shortcut
nach $shortcut = $shell.CreateShortcut($destination)
in ein PS laufen können.
Dadurch werden alle Eigenschaften und ihre aktuellen Werte gedruckt werden.