Showing posts with label MEMCM. Show all posts
Showing posts with label MEMCM. Show all posts

Tuesday 2 May 2023

Configuration Manager: The source directory for package does not exist

 


Error: The source directory \\networkshare\contents for the package "PS10001" does not exist.

Solution: make sure you have specified a valid package source directory on the Data Source tab in the package properties dialog box in the configuration manager console. If you specify a local path, it must be a local path on the site server. If you specify a path on a network drive, verify that the path exists and that the path is typed correctly.

I received this error, when I was creating a new network share for application package contents and distributed to DPs. In my case, I haven't given SYSTEM account NTFS security permissions.

There could be many other reasons why this error can be received when distributing contents to DPs. Below are some of the checklists, you can check to resolve this error.

1. Check if you have done any typo in the content location path.
2. Check if you have added SYSTEM account permissions to the sources share folder.
3. Check if you have added Site Server computer account permissions to the sources share folder.
4. In software updates case, check if the actual content are in place. The content might have deleted because of superseded/expired updates.

If you have faced this error in different scenario, please comment it - I will try to provide resolution for the same. Thank you


Friday 25 November 2022

Solved Driver Package Error: The specified folder does not exist or sms provider computer has no read, write or delete subfolders and files permissions to it

Error When Creating Driver Package:

New-CMDriverPackage : ConfigMgr Error Object:
instance of SMS_ExtendedStatus
{
Description = "SMS provider doesn't have read, write or delete permission to the package source path";
ErrorCode = 2;
File = "X:\\bt\\1216594\\repo\\src\\SiteServer\\SDK_Provider\\SMSProv\\sspdriverpackage.cpp";
Line = 131;
ObjectInfo = "\\\\CCNMEM01\\Drivers$\\Printers\\KONICA MINOLTA";
Operation = "PutInstance";
ParameterInfo = "";
ProviderName = "ExtnProv";
StatusCode = 2147749889;
};
At line:1 char:1
+ New-CMDriverPackage -Name "PrinterPkg - KONICA MINOLTA" -Description ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Microsoft.Confi...ewDriverPackage:NewDriverPackage) [New-CMDriverPackage], WqlQueryException
+ FullyQualifiedErrorId : UnhandledException,Microsoft.ConfigurationManagement.PowerShell.Cmdlets.Osd.NewDriverPackage


Solution:

Please add SMS Provider computer account (in my case I installed SMS provider in my primary server - ConfigMgrPS1) and SYSTEM account with full control permission to the driver UNC shared network folder.

Wednesday 24 August 2022

Clear - CCMCache remotely using Configuration Manger Console & PowerShell Script

Have you ever needed to remotely clean the ccmcache folder on a computer? This blog article will explain how:

Step 1 - Add following PowerShell script in Software Library > Scripts:

## Initialize the CCM resource manager com object
[__comobject]$CCMComObject = New-Object -ComObject 'UIResource.UIResourceMgr'
## Get the CacheElementIDs to delete
$CacheInfo = $CCMComObject.GetCacheInfo().GetCacheElements()
## Remove cache items
ForEach ($CacheItem in $CacheInfo) {
$null = $CCMComObject.GetCacheInfo().DeleteCacheElement([string]$($CacheItem.CacheElementID))
}

Step 2 - In the Configuration Manager (SCCM/MECM) console, locate the computer. 
Step 3 - Click it with the right mouse button and select Run Script > Select the Script you added > Next. 
Step 4 - Wait for the process to complete, and monitor Script Status Monitoring for output.

Thursday 27 January 2022

How to Configure Client Status in Configuration Manager - How to find when ConfigMgr Client status change to Inactive


How to Configure Client Status in Configuration Manager?
How to find when ConfigMgr Client status change to Inactive?

Follow the below steps:

Open Microsoft Endpoint Configuration Manager console, click Monitoring.

In the Monitoring workspace, click Client Status, then, in the Home tab, in the Client Status group, click Client Status Settings.




In the Client Status Settings Properties dialog box, specify the following values to determine client activity:
If none of the conditions are met, the client will be updated as inactive. Change the default values as per your organization client settings requirements:
  • Client policy requests during the following days (Default value is 7 days)
  • Heartbeat discovery during the following days (Default value is 7 days)
  • Hardware inventory during the following days (Default value is 7 days)
  • Software inventory during the following days (Default value is 7 days)
  • Status messages during the following days (Default value is 7 days)

Tuesday 7 December 2021

Database SQL Query: Find all table names with column name

SQL Server:

SELECT c.name as 'Column Name',t.name as 'Table Name'
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%<ColumnName>%'
ORDER BY TableName,ColumnName asc;

SELECT COLUMN_NAME as 'Column Name', TABLE_NAME as 'Table Name'
FROM  INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%<ColumnName>%'
ORDER BY    ColumnName, TableName asc;

SELECT name as 'Table Name'
FROM sysobjects 
WHERE id IN (SELECT id 
                          FROM syscolumns 
                          WHERE name like '%<ColumnName>%')

SELECT name as 'Table Name'
FROM sys.tables 
WHERE OBJECT_ID IN ( SELECT id 
                                               FROM syscolumns 
                                               WHERE name like '%<ColumnName>%' )

Oracle:

SELECT owner, table_name, column_name 
FROM all_tab_columns 
WHERE column_name LIKE '%<ColumnName>%' 
AND owner in ('<YOUR_SCHEMA_NAME>');

In above query replace <ColumnName> with any other column name.


If you simply want the table name you can run:

select object_name(object_id) from sys.columns where name like '%received_at%'


If you want the Schema Name as well (which in a lot of cases you will, as you'll have a lot of different schemas, and unless you can remember every table in the database and where it belongs this can be useful) run:

select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns where name like '%received_at%'


and finally if you want it in a nicer format (although this is where the code (In my opinion) is getting too complicated for easy writing):

select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns where name like '%received_at%'


note you can also create a function based on what I have:

CREATE PROCEDURE usp_tablecheck
--Scan through all tables to identify all tables with columns that have the provided string
--Stephen B
@name nvarchar(200)
AS
SELECT CONCAT(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) AS [Table Name], name AS [Column] FROM sys.columns
WHERE name LIKE CONCAT('%',@name,'%')
ORDER BY [Table Name] ASC, [Column] ASC
GO

It is worth noting that the concat feature was added in 2012. For 2008r2 and earlier use + to concatenate strings.

I've re-formatted the proc a bit since I posted this. It's a bit more advanced now but looks a lot messier (but it's in a proc so you'll never see it) and it's formatted better.

This version allows you to have it in an administrative database and then search through any database. Change the decleration of @db from 'master' to whichever you want the default database to be (NOTE: using the CONCAT() function will only work with 2012+ unless you change the string concatenation to use the + operators).

CREATE PROCEDURE [dbo].[usp_tablecheck]
    --Scan through all tables to identify all tables in the specified database with columns that have the provided string
    --Stephen B
    @name nvarchar(200)
    ,@db nvarchar(200) = 'master'
AS
    DECLARE @sql nvarchar(4000) = CONCAT('
        SELECT concat(OBJECT_SCHEMA_NAME(col.object_id,DB_ID(''',@db,''')),''.'',object_name(col.object_id,DB_ID(''',@db,'''))) AS [Table Name]
            ,col.name AS [Column] 
        FROM ',@db,'.sys.columns col
        LEFT JOIN ',@db,'.sys.objects ob 
            ON ob.object_id = col.object_id
        WHERE 
            col.name LIKE CONCAT(''%'',''',@name,''',''%'') 
            AND ob.type =''U''
        ORDER BY [Table Name] ASC
            ,[Column] ASC')
    EXECUTE (@sql)
GO

Hopefully this isn't a duplicate answer, but what I like to do is generate a sql statement within a sql statement that will allow me to search for the values I am looking for (not just the tables with those field names ( as it's usually necessary for me to then delete any info related to the id of the column name I am looking for):
  SELECT  'Select * from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'


Then I can copy and paste run my 1st column "SQLToRun"... then I replace the "Select * from ' with 'Delete from ' and it allows me to delete any references to that given ID! Write these results to file so you have them just in case.

NOTE**** Make sure you eliminate any bakup tables prior to running your your delete statement...


  SELECT  'Delete from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'

Friday 3 December 2021

Configuration Manager: WQL Query to find the machines based on Deployment Status

WQL Query to find the machines falls under unknown tab for any application or software update deployments:

Select 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
Join SMS_SUMDeploymentAssetDetails D
On SMS_R_System.resourceID = D.resourceID
Where D.assignmentID = '<Assignment ID>' and D.StatusType = '<Status No>'

To 'Assignment ID', Open Configuration Manager Console > Monitoring > Overview > Deployment > Select and right click the deployment and tick the Assignment ID

Assignment ID

Once you selected Assignment ID, a column will be added like below then copy the ID for your query:



And for machine status, below are the values for the respective status (Screenshot from Microsoft Document - SMS_SUMDeploymentAssetDetails Server WMI Class):


For example for Unknown machines:

Select 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
Join SMS_SUMDeploymentAssetDetails D
On SMS_R_System.resourceID = D.resourceID
Where D.assignmentID = '16779116' and D.StatusType = '4'







Wednesday 1 December 2021

Configuration Manager: How to force the machine to send DDR, Location Request, MP, and compliance report

To force any windows machine/computer's client agent to trigger sending DDR, Location Request, MP, and compliance report to Configuration Manager, please use the below command and run as administrator:

([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000012}'); ([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000024}'); ([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000111}'); [wmi]"ROOT\ccm\invagt:InventoryActionStatus.InventoryActionID='{00000000-0000-0000-0000-000000000003}'" | remove-wmiobject ([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000003}'); ([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000021}'); ([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000022}'); ([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000040}') | out-null; "Eval. MachinePolicy"; [void]([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000113}'); ([wmiclass]'ROOT\ccm:SMS_Client').TriggerSchedule('{00000000-0000-0000-0000-000000000108}'); "Update scan and evaluation" (New-Object -ComObject Microsoft.CCM.UpdatesStore).RefreshServerComplianceState()

Configuration Manager: Client Status and Categories

You might have came across below four client check categories during application or software update deployments - Unknown in Configuration Manager:

  • Client check failed/Active
  • Client check failed/Inactive
  • Client check passed/Active
  • Client check passed/Inactive

In this post, we'll see what these categories really implies. The distinction between Active and Inactive machines are an arbitrary date limit (by default, 7 days) for when it talked to Configuration Manager final. So the machines falls beneath "Client check passed/Inactive" implies the final commination with ConfigMgr, the client check was great, but haven't listened anything in at least 7 days.

Active implies the client has communicated with Configuration Manager since the limit. For case, in the event that the limit is set at the default of 7 days and a client communicated with the server 5 days prior, it would appear up as "Active" within the console.

You can change the limit in the Monitoring workspace by right clicking on Client Activity:

Client Activity

Client Status Settings window looks like below screenshot:

Client Status Settings

Client status update can be scheduled by right clicking on Client Activity:


Statistics of Click Status:

    Statistics dashboard in the client status will give you the detailed view of clients which are active/inactive:


Below are few examples of client check failures:






FREE Cybersecurity Certifications

Here's 15 FREE courses provided by the Qualys. The cybersecurity firm Qualys focuses on providing cloud-based security and compliance so...