Sergey
Владимир
Sergey
ну вот помню что меня не сильно впечатлило
Владимир
Выносить динамическое свойство DaysToExpire так себе затея.
Владимир
Это таблица HIST засрётся не успев начаться.
Sergey
каждый цикл :)
Sergey
сильный ход
Sergey
@VladimirZelenov Володь а тебе что надо от этих сертификатов то?
Владимир
Quantum Yupiter
Один большой зеленый банк делал, вроде норм
Sergey
а то может комплайнса будет достаточно
Владимир
Сотрудников первой линии проще научить смотреть готовые отчеты, чем учить работе с отчетами по комплайнсу.
Владимир
Тем более, что в отчетах можно будет задать собственные фильтры.
Sergey
так и так отчёт писать свой
Sergey
я имелл виду под себя
Dmitriy
Подскажите такой момент. Возможно ли создать коллекцию , кто не пользовался программой более 30 дней?
Sergey
Да, только сначала надо настроить сбор этой информации
Sergey
Это любимое демо мс было, про апп митиринг
Sergey
Отслеживание применения приложений с помощью функции контроля использования программных продуктов - Configuration Manager | Microsoft Docs
https://docs.microsoft.com/ru-ru/sccm/apps/deploy-use/monitor-app-usage-with-software-metering
Dmitriy
Sergey
Типа такого но только условие развернуть
Sergey
#WQL
World Of Tanks runing last 30 days
select
distinct SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client
from SMS_R_SYSTEM
inner join SMS_MonthlyUsageSummary
on SMS_R_SYSTEM.ResourceID = SMS_MonthlyUsageSummary.ResourceID
INNER JOIN SMS_MeteredFiles
ON SMS_MonthlyUsageSummary.FileID = SMS_MeteredFilesf.MeteredFileID
WHERE DateDiff(day, SMS_MonthlyUsageSummary.LastUsage, GetDate()) < 30
AND SMS_MeteredFiles.ProductName = 'World of Tanks'
Sergey
и там рядом несколько примеров
Sergey
#collection by #software #metering #rule
Projects does not used > 180 days
select distinct SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_SYSTEM inner join SMS_MonthlyUsageSummary on SMS_R_SYSTEM.ResourceID = SMS_MonthlyUsageSummary.ResourceID INNER JOIN SMS_MeteredFiles ON SMS_MonthlyUsageSummary.FileID =SMS_MeteredFilesf.MeteredFileID WHERE DateDiff(day, SMS_MonthlyUsageSummary.LastUsage, GetDate()) > 180 AND SMS_MeteredFiles.RuleID = '16777320'
Dmitriy
jitesh kumar
How Can I Exclude Certain Machines from the Collections
Looking to deploy certain apps in a collections where we don't want to deploy it for all systems added in collections
Please let me know, How can we achieve it
Евгений
А целевые коллекции имеют какой-то отличительный признак, которого нет у других?
Anton
а не проще сделать коллекцию из 10 компьютеров и туда сделать деплой приложений? )
Quantum Yupiter
Статистика деплоев будет отдельной )
Anton
ну тогда пошем прогнать, делов то
Andrew
А пош это что?)
Quantum Yupiter
Powershell
Pavel pinky13
Поверщель
Quantum Yupiter
ну тогда пошем прогнать, делов то
Кстати, говорят допилили кмдлет Add-CMDeviceCollectionDirectRule, или как его там, и теперь он умеет сразу много машин за 1 присест закидывать
Anton
Add-CMDeviceCollectionDirectMembershipRule
Anton
ну да, можно сразу бахнуть из ткстешника
Anton
Get-Content "computers.txt" | foreach { Add-CMDeviceCollectionDirectMembershipRule -CollectionName "Abracadabra Collection" -ResourceID (Get-CMDevice -Name $_).ResourceID }
Anton
ну а для коллекций аля nested foreach
Quantum Yupiter
Это сколько будет бегать на 100 компах хотя бы? :)
Quantum Yupiter
Надо ж в БД найти машинку по имени (неиндексированное поле), а затем добавить её в коллекцию - и так 100 раз
Anton
https://skorotkov.wordpress.com/2018/06/24/sccm-powershell-add-cmdevicecollectiondirectmembershiprule/
Quantum Yupiter
Quantum Yupiter
Впрочем гонять такой запрос к БД тоже не ахти, но надо
Владимир
Invoke-CMWmiQuery в помощь.
Владимир
Он понимает вхождения IN
Anton
чот по программистки сказал вроде
Anton
но это не точно )
Владимир
Invoke-CMWmiQuery -Query 'SELECT * FROM SMS_R_System WHERE Name IN ("computername1", "computername2")', далее эти данные отдавать в конвейер.
Sergey
не будет там много операций для 10 компов
сделать коллекцию, а её уже директом / инклюдом в остальные
Sergey
а лучше за ранее делать бандлы таких коллекций
типа
all MS Office
All MS Product
Sergey
хотя вон и так бандлы софтовые обещают, может и не актуально уже
Владимир
Anton
да запустил и оставил и похуй )
Владимир
Через выполнение Get-CMDevice можно никогда не дождаться выполнения скрипта :)
Sergey
Евгений
Или я чего-то не понял в условии?
Владимир
Anton
и ваще директмембершип не бест практис )
Евгений
в условии не было запрещения
Anton
а для теста показать заказчику пускай хоть 10 минут там добавляет
Anton
да, ТЗ не очень
Anton
пфешники тут вечно ворчат, а потом скидывают линк на свой пост про членство в коллекциях и как это отображается на производительности и ваще )))
Владимир
К примеру, у меня есть портал, где отражены назначенные лицензии. У меня есть коллекции, которые нужно динамически менять согласно этому списку. Но я, честно говоря, использую New-CMCollectionQueryMembershipRule.
Anton
напиши ему сразу запрос в бд 😉
Anton
и ваще где там рест апи уже для конфига ... чот ждём всё и ждём
Anton
вот это вот всё дрочево давно уже надо методами в апи дёргать, а то всё пош-хуёшь, а тут чем удобно, тем и долбишься
Anton
в скоме правда вот они попробовали, но все полимеры проебали ;(
Владимир
Кстати, в SCCM нет командлета поменять Query Rule.
Владимир
function Set-CMCollectionQueryMembershipRule
{
[CmdletBinding(DefaultParameterSetName = "CollectionID")]
param(
[Parameter(
Mandatory = $true,
ValueFromPipeline = $true,
ParameterSetName = "Collection")]
[Alias("InputObject")]
[Microsoft.ConfigurationManagement.ManagementProvider.IResultObject]$Collection,
[Parameter(
Mandatory = $true,
ParameterSetName = "CollectionID")]
[Alias("CollectionId")]
[String]$Id,
[Parameter(
Mandatory = $true,
ParameterSetName = "Name")]
[String]$Name,
[Parameter(
Mandatory = $true)]
[String]$RuleName,
[Parameter(
Mandatory = $true)]
[String]$QueryExpression
)
process {
if ($PSCmdlet.ParameterSetName.Equals("CollectionID")) {
$Collection = Get-CMCollection -Id $Id
}
elseif ($PSCmdlet.ParameterSetName.Equals("Name")) {
$Collection = Get-CMCollection -Name $Name
}
$QueryMembershipRule = Get-CMCollectionQueryMembershipRule -InputObject $Collection -RuleName $RuleName
if ($QueryMembershipRule -eq $null) {
$QueryMembershipRule = $Collection.ConnectionManager.CreateInstance("SMS_CollectionRuleQuery")
$QueryMembershipRule.RuleName = $RuleName
}
$QueryMembershipRule.QueryExpression = $QueryExpression
$Properties = New-Object 'System.Collections.Generic.Dictionary[String,Object]'
$Properties.Add("collectionRule", $QueryMembershipRule)
$Collection.ExecuteMethod("AddMembershipRule", $Properties) | Out-Null
}
} Если вдруг кому-то надо.
Владимир
Я тут еще нашел, если нужно сделать Update Membership. В существующих командлетах тоже такого нет.
function Update-CMCollectionMembership
{
param(
[Parameter(
Mandatory = $true,
ParameterSetName = "SMS_Collection",
ValueFromPipeline = $true)]
[Microsoft.ConfigurationManagement.ManagementProvider.IResultObject]$Collection,
[Parameter(
Mandatory = $true,
ParameterSetName = "Name")]
[String]$Name,
[Parameter(
Mandatory = $true,
ParameterSetName = "Id")]
[Alias("CollectionId")]
[String]$Id,
[Switch]$IncludeSubcollections
)
begin {
if ($PSCmdlet.ParameterSetName.Equals("Name")) {
$Collection = Get-CMCollection -Name $Name
}
elseif ($PSCmdlet.ParameterSetName.Equals("Id")) {
$Collection = Get-CMCollection -Id $Id
}
}
process {
$Properties = New-Object 'System.Collections.Generic.Dictionary[String,Object]'
$Properties.Add("includesubcollections", $IncludeSubcollections.IsPresent)
$Collection.ExecuteMethod("RequestRefresh", $Properties) | Out-Null
}
}
Quantum Yupiter
Sergey
Quantum Yupiter
The System Center Configuration Manager AdminService Guide - A Square Dozen
https://www.asquaredozen.com/2019/02/12/the-system-center-configuration-manager-adminservice-guide/
Quantum Yupiter
Из интернета рулить можно через cmg