Создайте ярлык «mydocuments» на рабочем столе с помощью powershell

#powershell #shortcut

#powershell #ярлык

Вопрос:

Я пытаюсь создать ярлык «MyDocuments» на моем локальном компьютере, используя следующий скрипт. Но когда я запускаю скрипт через Azure Intune, он создает ярлык, но целью является «Этот компьютер».

 $ShortcutPath = "$env:PublicDesktopDocu.lnk" 
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($ShortcutPath)
$Shortcut.TargetPath = [environment]::GetFolderPath('MyDocuments')
$Shortcut.Save()
  

Комментарии:

1. есть ли у используемой учетной записи MyDocuments каталог? есть ли какие-либо ошибки? работает ли это, если вы запускаете скрипт, используя ту же учетную запись, что и AZIntune?

Ответ №1:

Попробуйте этот. Для запуска этого скрипта вам нужны права администратора, поскольку вы читаете профили других пользователей.

 Add-Type -AssemblyName System.DirectoryServices.AccountManagement

$user = "YourUsername" # User to set link to desktop

# get user sid and profilepath

$sid         = (Get-WmiObject -Class win32_useraccount -Filter "name = '$user'").SID
$profilePath = (Get-WmiObject -Class Win32_UserProfile -Filter "SID = '$sid'").LocalPath

if( $profilePath -ne $null ) {

    $currentUser = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current
    $currentSid  = $currentUser.Sid.Value

    # if another user load reg hive

    if( $currentSid -ne $sid ) {
        $pathReg = Resolve-Path "$profilePath..$userNTUSER.DAT"
        reg load "HKU$sid" $pathReg | Out-Null
    }

    New-PSDrive -Name 'HKUser' -PSProvider Registry -Root "HKEY_USERS" | Out-Null


    # get desktop folder of user

    $shellFolders  = Get-Item "HKUser:$sidSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders"
    $desktopFolder = $shellFolders.GetValue("Desktop")
    [void]$shellFolders.Close()
    [void]$shellFolders.Dispose()

    Remove-PSDrive -Name 'HKUser'

    # if another user unload reg hive

    if( $currentSid -ne $sid ) {
        [System.GC]::Collect()
        [System.GC]::WaitForPendingFinalizers()
        try {
            reg unload "HKU$sid" | Out-Null
        }
        catch {}
    }

    # finally create shortcut

    if( $desktopFolder.Length -gt 0 ) {

        $ShortcutPath = $desktopFolder   'Docu.lnk'
        $WshShell = New-Object -ComObject WScript.Shell
        $Shortcut = $WshShell.CreateShortcut($ShortcutPath)
        $Shortcut.TargetPath = [environment]::GetFolderPath('MyDocuments')
        [void]$Shortcut.Save()

    }
}