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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top