سؤال

ولقد وجدت وسيلة VBS تلقاها في القيام بذلك، ولكن أنا أبحث عن إجراء الفاخرة الأصلي لتحرير خصائص ملف .LNK. والهدف هو الوصول إلى الأجهزة البعيدة، مكررة اختصار موجود مع معظم الخصائص الصحيحة، وتحرير اثنين منهم.

إذا سيكون من الاسهل مجرد كتابة ملف الاختصار الجديد، الذي سيعمل أيضا.

هل كانت مفيدة؟

المحلول

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

وجدت نسخة VB من الشفرة هنا: HTTP: // www.tutorialized.com/view/tutorial/Extract-the-target-file-from-a-shortcut-file-.lnk/18349

نصائح أخرى

وفيما يلي الوظائف يمكنني استخدام للتعامل مع ملفات .lnk. يتم تعديلها وجدت إصدارات وظائف هنا كما ذكرNathan هارتلي. لقد تحسنت Get-Shortcut للتعامل مع أحرف البدل مثل * عن طريق تمرير السلاسل إلى dir لتوسيع لهم في مجموعات من الأجسام FileInfo.

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()
  }
}

وأنا لا أعتقد أن هناك وسيلة الأم.

وهناك هذا DOS UTIL: Shortcut.exe

وأنت لا تزال بحاجة إلى نسخ UTIL إلى النظام البعيد، ثم ربما نسميها باستخدام WMI لإجراء التغييرات التي تبحث عنها.

سوف

وأنا أفكر في طريقة أسهل أن تكون الكتابة و / أو إنشاء ملف جديد.

هل لديك الوصول إلى هذه الأنظمة عبر مشاركة بعيدة؟

وثمة إضافة قصيرة إلى @ JasonMArcher في الجواب ..

لمعرفة الخصائص المتوفرة يمكنك فقط تشغيل $shortcut بعد $shortcut = $shell.CreateShortcut($destination) في PS . وهذا طباعة كافة الخصائص وقيمها الحالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top