#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()
}
}