تحرير الاختصار (.lnk) الخصائص مع بوويرشيل
-
20-08-2019 - |
سؤال
ولقد وجدت وسيلة 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 م>.
وهذا طباعة كافة الخصائص وقيمها الحالية.