') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - 1RedOne/ClientFaux: Your GUI Tool for quickly adding clients to ConfigMgr · GitHub
Skip to content

Latest commit

History

97 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ClientFaux logo, think 'sly like a fox'

ClientFaux - Client Simulation Tool

A tool for adding simulated CM Clients to ConfigMgr for collection querying, report building, and testing ConfigMgr environments. Read the blog post here.

start with why

Setting up the environment

Requires HTTP Mode enabled on PrimaryWorking on allowing https mode, but presently only expected to work with a primary which allows http communications

There is now practically no setup to the tool, simply download the newest release from releases above! Run the installer then launch ClientFaux as a standard user account (or admin, doesn't matter).

Navigate to the `⚙CM Settings' tab and provide your CM Servers FQDN or netbios name, then the three letter site code. The tool will not work without both.

Then switch to the Naming tab and provide your client base name and the starting and ending device IDs you'd like to create in CM.

Then hit 'Ready' from the main tab when you're ready to go!

The client should appear within CM in ten seconds or so! Hardware Inventory will take a bit longer to appear.

Feature Roadmap

FeatureVersionDone?
No more hardcoded variables!v0.1-alpha✔️
No more hardcoded pathsv0.2-alpha✔️
Flexible Cert Pathv0.2-alpha✔️
Better loggingv0.3-alpha✔️
Working Client Inventoryv1.0✔️
WPF GUIv2.0✔️
User Custom Client Discovery Valuesv2.1✔️
Support for compressionv 2.2✔️
Loggingv3.0✔️
Integrated Installerv3.0✔️
Save Settingsv3.1---
Custom Inventory of apps------
Machine and User policy viewing------
Client HeartBeat Sending------
Reusable Clients------

Custom DDM now works too!

ClientFaux logo, think 'sly like a fox'

Reconciliation and Reporting

All devices created with ClientFaux recieve the custom DDR property of ClientType : FakeClient, you can use this property to exclude all fake Clients, or to exclude them instead in your reports and Collections.

Troubleshooting

Check DDM.Log and mpcontrol.log on the ConfigMgr primary site for troubleshooting information and also the \SMS_CCM\Logs\MP_RegistrationManager.log file for additional troubleshooting. Now also creates client side logging as well, which will be found in the working directory of the app, as DebugCMLog.log

Warning

This is meant for TestLab use only. Proceed with caution

tested on ConfigrMgr Current Branch v2002

About

Your GUI Tool for quickly adding clients to ConfigMgr

Topics

Resources

Stars

19 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages