Windows Script Host でカスタムショートカットを作成する

最終更新: 29/09/2025
  • WSHを使用すると、VBScript、VBA、VB6、VFPから.lnkおよび.urlショートカットを作成できます。 PowerShellの WScript.Shell オブジェクトを使用します。
  • IT 展開では、コンテキスト (ユーザー vs システム) によって、パブリック デスクトップを使用するか、ユーザー デスクトップを使用するかが決まります。
  • MSIX/PSF を使用すると、AppExecutionAlias はバージョン管理されたパスを回避し、永続的なアクセスを容易にします。
  • アイコン、引数、ホットキー、ウィンドウ スタイルは、ショートカット プロパティによって制御されます。

WSH を使用した Windows のショートカット

ショートカットを作成するのは、単に便利なだけではありません。タスクを自動化し、日々の生産性を向上させる方法でもあります。 Windows. Windows スクリプト ホスト(WSH) 複数のスクリプト言語からアプリケーション、ドキュメント、Web アドレスへのリンクを生成するシンプルで強力な方法を提供します。

この実践ガイドでは、実証済みのテクニックと VBScript、PowerShell、Visual Basic、Visual FoxPro パッケージを使用した現代的なシナリオ MSIXとPSF目標は、環境に最適なアプローチ (エンド ユーザー、IT、Intune/SCCM、パッケージ) を選択し、自信を持って実装できるようにすることです。

Windows Script Hostとは何か、なぜ重要なのか

Windows Script Hostは、実行を可能にするインフラストラクチャです。 VBScriptとJScript システム タスクを自動化するための COM オブジェクト モデルを公開するほか、Windows 上でネイティブに実行できます。 WScript.Shell オブジェクト これは、デスクトップ ショートカット、スタート メニュー ショートカット、または特別なフォルダーを作成するための重要な要素です。

WSHは、次のようなバージョンからWindowsの一部となっています。 Windows 98および2000オプションのコンポーネントを使用して、Windows NT 4.0 などの古いエディションに追加することもできます。 現代のシステムでは統合されている 実際には、スクリプトを起動するには実行可能ファイル wscript.exe と cscript.exe があれば十分です。

ショートカットのスクリプトの例

開始前の要件とベストプラクティス

始める前に、いくつかの基本的なポイントを確認することをお勧めします。 WSHが利用可能であることを確認する スクリプトの実行をブロックするポリシーはありません。企業環境では、GPOやウイルス対策の設定がVBScriptやPowerShellに影響を与える可能性があります。

ショートカットでデスクトップが乱雑にならないようにしてください。 価値を追加する場合にのみアクセスを作成する 集中的に配布する場合は、明確な基準(作業フォルダや apps 重要な企業)。

スクリプトを次のように実行した場合 システムまたはマシンコンテキスト (Intune/SCCM)、.lnk を書き込む場所を慎重に検討してください。現在のユーザーのデスクトップではなく、パブリック デスクトップ (C:\\Users\\Public\\Desktop) を使用する必要がある場合があります。

を確認してください 宛先パス、権限、環境変数よくある間違いは、バージョンが変更されているパス (Program Files\\WindowsApps) を指定したり、スクリプトを実行しているアカウントからのアクセスなしで UNC を使用したりすることです。

特別なフォルダとそのパスの解決方法

WSHは、特殊フォルダ名を実際のパスに解決します。 WshShell.SpecialFolders最も便利なのは、デスクトップ、スタートメニュー、プログラム、スタートアップ、お気に入り、およびすべてのユーザー向けのそれらのバリエーション (AllUsersDesktop、AllUsersStartMenu など) です。 これにより、独立することができます 言語とプロファイルの正確な構造。

従来のVisual Basicを使用している場合や、APIからルートを取得したい場合は、 SHGetSpecialFolderLocation/SHGetPathFromIDList デスクトップ、最近使用したプログラム、ドキュメントなどのパスを一覧表示します。 アプリケーションに統合するときに便利です WScript オブジェクトに直接依存しないもの。

基本パターン: WScript.Shell でショートカットを作成する

フローはシンプルです。COM インスタンスを作成し、ショートカットを生成し、プロパティを入力して保存します。 このパターンはVBScript、VBA、VB6、VFP、PowerShellで繰り返されます。 若干の構文の違いがあります。

' VBScript: acceso directo a una aplicación
Dim sh, lnk
Set sh = CreateObject("WScript.Shell")
Dim escritorio: escritorio = sh.SpecialFolders("Desktop")
Set lnk = sh.CreateShortcut(escritorio & "\\MiApp.lnk")
lnk.TargetPath = "%windir%\\notepad.exe"
lnk.IconLocation = "%windir%\\system32\\shell32.dll,0"
lnk.Arguments = ""
lnk.WorkingDirectory = "%windir%"
lnk.WindowStyle = 4 ' Normal (3 maximizada, 7 minimizada)
lnk.Save

En VBA/VB6 パターンは同等で、構文とコードのホスト場所のみが異なります。デスクトップにショートカットを作成し、説明やアイコンを割り当てることができます。 ホットキー ウィンドウスタイル:

' VBA/VB6: crear acceso con icono y hotkey
Dim sh As Object, sc As Object
Set sh = CreateObject("WScript.Shell")
Dim destino As String: destino = sh.SpecialFolders("Desktop") & "\\BlocDeNotas.lnk"
Set sc = sh.CreateShortcut(destino)
With sc
  .TargetPath = "%windir%\\system32\\notepad.exe"
  .WorkingDirectory = "%windir%\\system32"
  .IconLocation = "%windir%\\system32\\shell32.dll,2"
  .Description = "Abrir el Bloc de notas"
  .Hotkey = "ALT+CTRL+N"
  .WindowStyle = 4
  .Save
End With

とともに Visual FoxPro WScript.Shellオブジェクトも使用できます。考え方は同じです。デスクトップを探し、.lnkを作成し、次のようなプロパティを設定します。 ウィンドウスタイル、アイコンの場所、ターゲットパス またはキーの組み合わせ。

* Visual FoxPro: crear acceso directo de ejemplo
LOCAL sh, desk, sc
sh = CREATEOBJECT("WScript.Shell")
desk = sh.SpecialFolders("Desktop")
sc = sh.CreateShortcut(desk + "\\EjemploWSH.lnk")
sc.TargetPath = "%windir%\\notepad.exe"
sc.IconLocation = "C:\\Path\\a\\miicono.ico"
sc.Hotkey = "ALT+CTRL+F"
sc.WindowStyle = 3 && 3=max 7=min 4=normal
sc.Save

いずれの場合も、核となる部分は同じです。 ショートカットの作成、ターゲットパス、保存そこから、必要に応じて引数、アイコン、作業ディレクトリ、ウィンドウ スタイルをカスタマイズします。

  VLCでネットワーク経由でビデオを簡単にストリーミングする方法

引数、ウィンドウスタイル、アイコン、ショートカット

アクセス時にパラメータを指定してアプリを起動する必要がある場合は、 .引数プロセスについては ブーツ 特定のフォルダで、 .作業ディレクトリ 正しいルートで。

見た目については、定義する .アイコンの場所 .icoファイルまたは.exe/.dllファイル内のリソースを指します(カンマの後にインデックスを指定できます)。開く動作は次のように制御されます。 .ウィンドウスタイル: 最大化 3、最小化 7、通常 4。

キーの組み合わせが必要な場合は、 .ホットキー ALT+CTRL+文字キーの組み合わせ(例:ALT+CTRL+N)を使用します。この割り当てにより、開く速度は速くなりますが、 あまり多く割り当てるのはお勧めできません システムのショートカットを妨げないようにするためです。

URL (.url) ショートカット

アプリケーションの .lnk に加えて、WSH はデフォルトのブラウザを開く .url ショートカットを作成できます。 TargetPathはウェブアドレスを指します 独自のアイコンが必要な場合は、後で .url ファイルを編集して IconFile と IconIndex を追加できます。

' VBScript: acceso directo a una URL
Dim sh, urlShortcut
Set sh = CreateObject("WScript.Shell")
Dim desk: desk = sh.SpecialFolders("Desktop")
Set urlShortcut = sh.CreateShortcut(desk & "\\SitioCorporativo.url")
urlShortcut.TargetPath = "https://www.ejemplo.com"
urlShortcut.Save
' (Opcional) reabrir el .url como texto y añadir:
' IconFile=C:\\Rutas\\icono.ico
' IconIndex=0

このアプローチは、 リンク先 SharePointの、イントラネットまたはWebアプリケーション ユーザーのデスクトップに便利なように残しておきたいもの。

IT 向け PowerShell: Intune、SCCM、大規模展開

PowerShell には WSH と同じ COM モデルへのアクセスが組み込まれているため、アクセスを作成して一括配布できます。 通常は正しいデスクトップを検出する (ユーザーまたはパブリック)、宛先フォルダーを生成し、必要に応じてクイック アクセスにパスをピン留めします。

# PowerShell: utilidades y creación del acceso
param(
  [Parameter(Mandatory=$true)] [string]$ShortcutTargetPath,
  [Parameter(Mandatory=$true)] [string]$ShortcutDisplayName,
  [string]$IconFile = $null,
  [string]$ShortcutArguments = $null,
  [string]$WorkingDirectory = $null
)
function Test-RunningAsSystem {
  # Devuelve true si el contexto es SYSTEM (S-1-5-18)
  ((whoami -user) -match "S-1-5-18")
}
function Get-DesktopDir {
  if (Test-RunningAsSystem) {
    Join-Path $env:PUBLIC "Desktop"
  } else {
    [Environment]::GetFolderPath("Desktop")
  }
}
function New-Shortcut {
  param([string]$Target, [string]$Path, [string]$Args, [string]$Work, [string]$Icon)
  $sh = New-Object -ComObject WScript.Shell
  $lnk = $sh.CreateShortcut($Path)
  $lnk.TargetPath = $Target
  if ($Args) { $lnk.Arguments = $Args }
  if ($Work) { $lnk.WorkingDirectory = $Work }
  if ($Icon) { $lnk.IconLocation = $Icon }
  $lnk.WindowStyle = 4
  $lnk.Save()
  [Runtime.InteropServices.Marshal]::ReleaseComObject($sh) | Out-Null
}
$desk = Get-DesktopDir
$targetFolder = Join-Path $desk "SharePoint Shortcuts"
if (-not (Test-Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder | Out-Null }
$dest = Join-Path $targetFolder ("{0}.lnk" -f $ShortcutDisplayName)
New-Shortcut -Target $ShortcutTargetPath -Path $dest -Args $ShortcutArguments -Work $WorkingDirectory -Icon $IconFile

実装では インチューンこのパターンを使用すると、デスクトップにフォルダーを作成し、SharePoint URL などのパラメーターを使用して Edge へのアクセスを渡すことができます。 SYSTEMとして実行する場合、ターゲットデスクトップはパブリックデスクトップとなり、すべてのプロファイルに表示されます。

  他人があなたの Chromecast マシンを制御できないようにする方法を学びましょう

En SCCMあらかじめ作成された .lnk を展開する場合、最小限のコマンドは、それをパブリック デスクトップにコピーするだけです。 コピーアイテム \\server\\path\\access.lnk C:\\Users\\Public\\Desktop表示されない場合は、次の点を確認してください。

  • 実行コンテキスト: プログラムが十分な権限で、想定されるユーザー/システムで実行されることを確認します。
  • 共有リソースへのアクセス: 実行中のアカウントは UNC パスを読み取ることができる必要があります。
  • スペースのあるルート: -Path と -Destination を引用符で囲みます。
  • ビットネス: 32 ビットと 64 ビットが混在する環境で、不要なリダイレクトがないことを確認します。

Shell.Application でクイック アクセスにピン留めする

デスクトップに加えて、フォルダをピン留めすることもできます 素早いアクセス Shell.Application COMオブジェクトを使用します。これは、バインディングパスを作成し、エクスプローラーからアクセスできるようにしたい場合に便利です。

# PowerShell: anclar carpeta a Acceso rápido
$quick = New-Object -ComObject shell.application
$toPin = Join-Path ([Environment]::GetFolderPath("Desktop")) "SharePoint Shortcuts"
$home = "shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}"
if(-not ($quick.Namespace($home).Items() | Where-Object { $_.Path -eq $toPin })){
  $quick.Namespace($toPin).Self.InvokeVerb("pintohome")
}

チームを管理していて、ユーザーがショートカットをすぐに見つけられるようにしたい場合は、 この小さな行動が変化を生む 彼らの日々に。

MSIX と PSF: バージョンパスに依存せずにアクセスを作成する

アプリケーションをパッケージ化する場合 MSIXインストールパスにはバージョン情報が含まれています(例:C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…)。これはアップデートごとに変更されるため、そのパスを含む.lnkファイルを設定するのはお勧めできません。 解決策: AppExecutionAliasマニフェストでエイリアスを定義すると、バージョンに縛られることなく、%localappdata%\\Microsoft\\WindowsApps\\myapp.exe を使用してアプリを起動できます。

これを行うには、マニフェストに名前空間(uap3とデスクトップ)を追加し、拡張機能を作成します。 windows.appExecutionAlias パッケージの実行可能ファイルを指します。マニフェストが認識できるように、IgnorableNamespaces に名前を含めることを忘れないでください。

その後、アプリケーションのエントリポイントを次のように変更できます。 PSFLauncher32.exe/PSFLauncher64.exe (アーキテクチャによって異なります)、PSF を使用して config.json で定義された起動スクリプトにアクセスの作成を委任します。 スクリプトは一度実行される 最初の初期化時に。

{
  "applications": [
    {
      "id": "App",
      "executable": "MiApp\\MiApp.exe",
      "workingDirectory": "MiApp\\",
      "startScript": {
        "scriptPath": "createshortcut.ps1",
        "runInVirtualEnvironment": false,
        "waitForScriptToFinish": true,
        "showWindow": false,
        "runOnce": true
      }
    }
  ]
}

パワーシェル ショートカット.ps1を作成します 既成の .lnk ファイルをパッケージからユーザーのデスクトップにコピーしたり、アイコンをワークスペースに表示したりすることもできます。 ローカルキャッシュ\\ローミング バージョン間で安定しています。

# createshortcut.ps1 (dentro del paquete)
Copy-Item "Mi App.lnk" "$env:USERPROFILE\\Desktop\\Mi App.lnk" -Force
Copy-Item "miapp.ico" "$env:APPDATA\\miapp.ico" -Force

このアプローチにより、更新後もアクセスが機能することが保証されます。 各バージョンの.lnkファイルに触れることなくパスがエイリアスを指している場合 (たとえば、%localappdata%\\Microsoft\\WindowsApps\\myapp.exe)、パスは引き続き有効です。

エラー処理と推奨される検証

.lnkを生成する前に、 TargetPathが存在する (%windir% などの変数やエイリアスを使用しない限り)。VBA/VB6 では、実行可能ファイルが見つからない場合に警告を発したり、操作をキャンセルしたりできます。PowerShell では、Test-Path を使用してパスにアクセスできるかどうかを確認します。

  Windows PCでFaceTimeを使用する方法

アイコンパスが .icoネットワーク便利な方法としては、それをユーザーの temp または APPDATA フォルダーにコピーし、そこから参照する方法があります。 壊れたアイコンを避ける方法 ネットワーク リソースが利用できない場合。

.urlショートカットを編集する際に、独自のアイコンが必要な場合は、ファイルをテキストとして再度開き、 IconFile と IconIndex 最後に。これにより、ブラウザに依存せずに外観を完全に制御できます。

COMを終了すると、 リリースComObject PowerShellではNothingを代入し、VB/VBAではNothingを代入します。些細なことですが リソースのハングを回避するのに役立ちます 徹底的な処刑で。

典型的な失敗事例とその解決方法

SCCMによる展開がコード0で終了したにもかかわらずアクセスが表示されない場合は、まず デスクトップの対象ユーザーSYSTEM として実行している場合、対話型プロファイルに %USERPROFILE%\Desktop と入力しても何も表示されません。C:\Users\Public\Desktop と入力すると、誰でも表示できるようになります。

Intuneで、引数(エンコードされたスペースを含むURLなど)付きのEdgeプロンプトを生成する場合は、次のことを確認してください。 引用符は問題ありません -ShortcutArguments ではテキストがそのまま届きます。 場違いな空間 .lnk の運命を断ち切ることができます。

企業のショートカットフォルダ(例:「SharePointショートカット」)の場合は、まず適切なデスクトップにフォルダを作成し、エクスプローラで強調表示したい場合は、 クイックアクセスへのアンカー Shell.Application で見たとおりです。

更新中の MSIX パッケージで既にビルドされた .lnk を配布する場合は、WindowsApps 内のバージョン パスを指定しないでください。 AppExecutionAliasを使用する バージョン管理されたフォルダーからアイコンをコピーします。

変数とパスを使った便利なトリック

移植可能なスクリプトを書くには、 環境変数: %windir%、%systemroot%、%ProgramFiles% など。WSHでは、これらを次のように展開できます。 環境文字列を展開するPowerShell では、$env:VARIABLE を介して参照できます。

動的ルートを構築するときは、 作業フォルダは\で終わります 連結時にバーが重複したりTargetPathが壊れたりするのを防ぐためです。これは小さなガードレールです 微妙なミスを避ける 生産中。

複雑なパラメータを必要とするショートカットの場合は、小さな .cmd または .ps1 スクリプトを記述し、ショートカットでそれをポイントすることを検討してください。 .lnkを簡素化する方法 引用符と引数の順序をより適切に制御できるようになります。

ホットキーが必要な場合は、 重要な文字 よく使うショートカットとの衝突を避けましょう。多くのアプリがある環境では、ショートカットを文書化してユーザーが理解できるようにしましょう。 試行錯誤せずに活用する.

Windows では、信頼性が高く柔軟な方法でショートカットを作成するためのさまざまなオプションがあります。 WSHは共通基盤であるさらに、大規模な反復プロセスが必要な場合は、従来のスクリプト、最新のPowerShell、またはPSFを使用したMSIXパッケージングからレイヤーを選択できます。重要なのは、適切なパスを選択し、実行コンテキストを検証し、脆弱なバージョン管理されたパスに縛られないようにすることです。