PowerShellを使用し編集ショートカット(.LNK)のプロパティ
-
20-08-2019 - |
質問
私はこれを行うには厄介なVBSの道を見つけたが、私は.lnkファイルのプロパティを編集するには、ネイティブPOSH手順を探しています。目標は、リモートマシンに手を差し伸べる正しいプロパティのほとんどを既存のショートカットを複製し、それらのカップルを編集することです。
それは単に新しいショートカットファイルを書き込むことが容易になるだろう場合は、それはあまりにも動作します。
解決
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ハートレイで述べたような機能のバージョンはこちらのを見つけ修正しています。私はのFileInfoオブジェクトのセットにそれらを展開するGet-Shortcut
する文字列を渡すことで*
のようなワイルドカードを処理するためにdir
改善しました。
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()
}
}
私はネイティブな方法はないと思う。
Shortcut.exeする :。このDOS utilにあり
あなたはまだ、その後、おそらくあなたが探しているの変更を行うためにWMIを使用してそれを呼び出す、リモートシステムにutilのをコピーする必要があります。
私は簡単な方法は、上書きおよび/または新しいファイルを作成することになります考えています。
リモートの共有を経由して、これらのシステムへのアクセス権を持っていますか?
@ JasonMArcherの答えに短いほか..
あなただけ実行することができます$shortcut
$shortcut = $shell.CreateShortcut($destination)
後にのPS の中で利用可能なプロパティを参照してください。
これは、すべてのプロパティとその現在の値を表示します。