none
Обнаружение файла на рабочем столе пользователя в SCCM 2012 RRS feed

  • Вопрос

  • Всем доброго дня!

    Создал приложение, которое через PowerShell создает на рабочем столе пользователя ярлык для определенного файла. Выполняется под  пользователем, вошедшим в систему. Все прекрасно работает, НО! В качестве метода обнаружения в строке файл пишу "%userprofile%\desktop" и файл "test.lnk"
    SCCM "не понимает" запись типа %userprofile% и, естественно, после отработки приложения выдает ошибку типа "после установки не обнаружено ПО"
    Посоветуйте, как "помочь" обнаружить файл на десктопе пользователя в "методах обнаружения", чтобы исключить данную ошибку.

    P.S. Файл копируется именно в %userprofile%\desktop, а не в C:\Users\Public\desktop

    25 августа 2015 г. 21:39

Ответы

  • Видимо, у System не хватает прав записывать файлы по этому пути:(

    ммм... )))) 

    Раз вам надо повесить выполнение чего-то каждый раз на логон пользователя используйте GPO. 

    Вы так же можете деплоить софт на пользователя, а не на устройство.

    А можете все сделать одним повершел скриптом, проверяя после каждой установки, что ПО есть, и там же у вас будет скрипт, который распихает  иконки куда надо.

    26 августа 2015 г. 19:51
    Модератор
  • Агент SCCM действительно работает от имени Системы, а вам нужен текущий пользователь. Поэтому проще использовать другой механизм - Group Policy Preference для управления ярлыками.

    Сазонов Илья

    https://isazonov.wordpress.com/

    26 августа 2015 г. 4:28
    Модератор

Все ответы

  • доброго.

    используйте Configuration Items, это будет правильней. 

    В discovery будет что-то подобное:

    $Path = "$env:userprofile\Desktop\App.lnk"
    if (Test-Path -path $Path)
    {Write-Host 'Compliant'}
    else
    {Write-Host 'Non-Compliant'}

    В Compliance Rule проверяете вывод, в моем случае это Compliant. Там вообще все, что угодно можно, хоть true/false и т.д. Если "non-compliant", то см ниже.

    В remediation копируем из сетевой шары файл для всех пользователей, кроме Public

    ForEach ($user in (Get-ChildItem "C:\Users" -Exclude Public)) {
    Copy-Item -Path "\\sccm\lnk\App.lnk" -Destination "C:\Users\$user\Desktop\App.lnk"
    Ну или только для него одного:

    $Path = "$env:userprofile\Desktop\App.lnk"
    Copy-Item -Path "\\sccm\lnk\App.lnk" -Destination $Path

    Еще можно создать package, там вообще ничего не надо проверять, запустили в сеансе пользователя один раз и все.

    А запускать в application скрипт powershell, чтобы потом проверять его выполнения через detection method? ну хз. ))))

    25 августа 2015 г. 23:00
    Модератор
  • а еще чего вспомнил, application работает от контекста "system", так что у вас не выйдет ничего.

    можно сделать иначе, это в скрипте powershell добавить copy-item и скопировать файл, например текстовый файл в c:\anyfolder\file.txt, а вот уже в detection method сделать проверку по этому пути, тогда прокатит, если вам очень хочется продолжать использовать application. Но это костыль.

    Либо копировать lnk вообще для всех пользователей и проверять через фиксированный путь c:\users\public\desktop\app.lnk

    25 августа 2015 г. 23:24
    Модератор
  • Агент SCCM действительно работает от имени Системы, а вам нужен текущий пользователь. Поэтому проще использовать другой механизм - Group Policy Preference для управления ярлыками.

    Сазонов Илья

    https://isazonov.wordpress.com/

    26 августа 2015 г. 4:28
    Модератор
  • Спасибо большое за ответы! Не до конца раскрыл суть задачи:) Я использую application с копированием файла на рабочий стол, в котором есть еще 3 зависимых приложения. Сначала устанавливаются они, а потом копируется этот ярлык на рабочий стол. Пытался обычной командой copy или xcopy в cmd-файле копировать файл в c:\users\public\desktop\. Ни фига не получается. Видимо, у System не хватает прав записывать файлы по этому пути:( Поэтому-то и пришлось использовать Powershell. С помощью него получилось, но имеем проблему с детекцией этого файла SCCM'ом:(
    Вариант с копированием файла в c:\anyfolder\file.txt не проходит, потому что под другим пользователем, вошедшем на этот ПК application не отработает, т.к. file.txt уже присутствует, поэтому SCCM "по-честному" пропустит выполнение этой задачи.

    26 августа 2015 г. 19:42
  • Видимо, у System не хватает прав записывать файлы по этому пути:(

    ммм... )))) 

    Раз вам надо повесить выполнение чего-то каждый раз на логон пользователя используйте GPO. 

    Вы так же можете деплоить софт на пользователя, а не на устройство.

    А можете все сделать одним повершел скриптом, проверяя после каждой установки, что ПО есть, и там же у вас будет скрипт, который распихает  иконки куда надо.

    26 августа 2015 г. 19:51
    Модератор