使用属性创建快捷方式的 Poweshell 脚本

时间:2021-04-15 21:49:08

标签: windows powershell powershell-4.0

我正在关注此 msdn 文档。我想创建一个具有两个属性 AppUserModelIdToastActivatorCLSID 的快捷方式。我如何使用 powershell 实现这一点。

基本上我想转换以下代码并通过powershell脚本创建快捷方式。

_Use_decl_annotations_
HRESULT DesktopToastsApp::InstallShortcut(PCWSTR shortcutPath, PCWSTR exePath)
{
    ComPtr<IShellLink> shellLink;
    HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink));
    if (SUCCEEDED(hr))
    {
        hr = shellLink->SetPath(exePath);
        if (SUCCEEDED(hr))
        {
            ComPtr<IPropertyStore> propertyStore;

            hr = shellLink.As(&propertyStore);
            if (SUCCEEDED(hr))
            {
                PROPVARIANT propVar;
                propVar.vt = VT_LPWSTR;
                propVar.pwszVal = const_cast<PWSTR>(AppId); // for _In_ scenarios, we don't need a copy
                hr = propertyStore->SetValue(PKEY_AppUserModel_ID, propVar);
                if (SUCCEEDED(hr))
                {
                    propVar.vt = VT_CLSID;
                    propVar.puuid = const_cast<CLSID*>(&__uuidof(NotificationActivator));
                    hr = propertyStore->SetValue(PKEY_AppUserModel_ToastActivatorCLSID, propVar);
                    if (SUCCEEDED(hr))
                    {
                        hr = propertyStore->Commit();
                        if (SUCCEEDED(hr))
                        {
                            ComPtr<IPersistFile> persistFile;
                            hr = shellLink.As(&persistFile);
                            if (SUCCEEDED(hr))
                            {
                                hr = persistFile->Save(shortcutPath, TRUE);
                            }
                        }
                    }
                }
            }
        }
    }
    return hr;
}

我写了一个简单的脚本来创建快捷方式,但不确定如何标记上述两个道具

function set-shortcut {

param ( [string]$SourceLnk, [string]$DestinationPath )

    $WshShell = New-Object -comObject WScript.Shell

    $Shortcut = $WshShell.CreateShortcut($SourceLnk)

    $Shortcut.TargetPath = $DestinationPath

    $Shortcut.Save()

    }

2 个答案:

答案 0 :(得分:1)

为什么不直接使用 MS powershellgallery.com 中的预构建模块/脚本来确定它们是否解决了您的用例,而不是从头开始重写。除非这是一种学习努力。即便如此,查看下面的底层代码可能会有所帮助。

Find-Module -Name '*shortcut*'

# Results
<#
Version   Name                        Repository Description
-------   ----                        ---------- -----------
2.2.0     DSCR_Shortcut               PSGallery  PowerShell DSC Resource to create shortcut file.
...
1.0.6     PSShortcut                  PSGallery  This module eases working with Windows shortcuts (LNK and URL) files.
...
#>


Find-Script -Name '*Shortcut*'
# Results
<#
Version Name                       Repository Description   
------- ----                       ---------- -----------   
...                        
1.0.0.0 New-DeskTopShortCut        PSGallery  Create a desktop shortcut
#>

答案 1 :(得分:0)

我也不知道 PSGallery 中有这个任务的模块,所以我前段时间写了一个脚本,看看是否有帮助:

Set-Shortcut.ps1

编辑:

您只需在脚本顶部添加 $InformationPreference = "Continue" 即可显示信息性消息。