Лучший отвечающий
Обнаружение файла на рабочем столе пользователя в SCCM 2012

Вопрос
-
Всем доброго дня!
Создал приложение, которое через PowerShell создает на рабочем столе пользователя ярлык для определенного файла. Выполняется под пользователем, вошедшим в систему. Все прекрасно работает, НО! В качестве метода обнаружения в строке файл пишу "%userprofile%\desktop" и файл "test.lnk"
SCCM "не понимает" запись типа %userprofile% и, естественно, после отработки приложения выдает ошибку типа "после установки не обнаружено ПО"
Посоветуйте, как "помочь" обнаружить файл на десктопе пользователя в "методах обнаружения", чтобы исключить данную ошибку.P.S. Файл копируется именно в %userprofile%\desktop, а не в C:\Users\Public\desktop
25 августа 2015 г. 21:39
Ответы
-
Видимо, у System не хватает прав записывать файлы по этому пути:(
ммм... ))))
Раз вам надо повесить выполнение чего-то каждый раз на логон пользователя используйте GPO.
Вы так же можете деплоить софт на пользователя, а не на устройство.
А можете все сделать одним повершел скриптом, проверяя после каждой установки, что ПО есть, и там же у вас будет скрипт, который распихает иконки куда надо.
- Помечено в качестве ответа Petko KrushevMicrosoft contingent staff, Moderator 21 сентября 2015 г. 10:28
26 августа 2015 г. 19:51Модератор -
Агент SCCM действительно работает от имени Системы, а вам нужен текущий пользователь. Поэтому проще использовать другой механизм - Group Policy Preference для управления ярлыками.
Сазонов Илья
https://isazonov.wordpress.com/- Предложено в качестве ответа Andrey Muravlev 26 августа 2015 г. 12:02
- Помечено в качестве ответа Petko KrushevMicrosoft contingent staff, Moderator 21 сентября 2015 г. 10:28
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
- Изменено Anton MasyanMVP, Moderator 25 августа 2015 г. 23:25
25 августа 2015 г. 23:24Модератор -
Агент SCCM действительно работает от имени Системы, а вам нужен текущий пользователь. Поэтому проще использовать другой механизм - Group Policy Preference для управления ярлыками.
Сазонов Илья
https://isazonov.wordpress.com/- Предложено в качестве ответа Andrey Muravlev 26 августа 2015 г. 12:02
- Помечено в качестве ответа Petko KrushevMicrosoft contingent staff, Moderator 21 сентября 2015 г. 10:28
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.
Вы так же можете деплоить софт на пользователя, а не на устройство.
А можете все сделать одним повершел скриптом, проверяя после каждой установки, что ПО есть, и там же у вас будет скрипт, который распихает иконки куда надо.
- Помечено в качестве ответа Petko KrushevMicrosoft contingent staff, Moderator 21 сентября 2015 г. 10:28
26 августа 2015 г. 19:51Модератор