Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - knom/AzureResourceOwnerTag: Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE · GitHub
Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - knom/AzureResourceOwnerTag: Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE · GitHub
Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', '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('^' + ".*" + ' GitHub - knom/AzureResourceOwnerTag: Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE · GitHub
Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, '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" + ' GitHub - knom/AzureResourceOwnerTag: Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE · GitHub
Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, '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('^' + ".*" + ' GitHub - knom/AzureResourceOwnerTag: Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE · GitHub
Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, '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); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - knom/AzureResourceOwnerTag: Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE · GitHub
Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - knom/AzureResourceOwnerTag: Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE · GitHub
Skip to content

Repository files navigation

Azure Automation Script that Tags Azure Resource Groups

Why

Automatically tag new Resource Group with an alias an expiry date, so that clean-up and responsibility become easier.

What does it do

The Azure Automation Script does the following...

  • Find Resource Groups without the alias tag
  • Ignoring certain standard RGs by a REGEX pattern supplied
  • Search through Azure Activity Logs by using Get-AzureRmLog if there's any activities on these groups
  • Tag the Resource Group with the alias if a user was found in the logs
  • Tag the Resource Group with a deleteAfter date - 1 month in the future
  • Send out an e-mail to people about the newly tagged RGs (so people know and can correct if necessary)

Note: The script can only search 14 days back of log, to find out who the owner is. Earlier activities cannot be considered.

The script is not actually deleting anything ever. Just tagging with a deleteAfter date.

Deployment

1. Azure Automation Runbook Inputs

ParameterDefaultDescription
WhatIfFalseGoes into a dry-run mode of not actually tagging anything
ToEmptyReceipients of the mail, semicolon seperated and with <> brackets. e.g. "<asd@asd.com>;<foo@foo.com>"
DayCount1How many days to look back in the logs (between 1-14)

2. Azure Automation Variables

ParameterDescription
RG_NamesIgnoreIgnore these RG names (a regex) E.g. (Default-|AzureFunctions|Api-Default-).*
SubscriptionIdThe subscription ID GUID to monitor
TemplateUrlThe URL of the HTML Template used for the mail
TemplateHeaderGraphicUrlThe URL of the Header Graphic used for the mail (review script as this is optional)

3. Azure Automation Credentials

NameDescription
Office365Username / Password for the SMTP Server

4. Azure Automation Connection

NameDescription
AzureRunAsConnectionCreated by default

About

Azure Automation Script that Tags Azure Resource Groups with the OWNER and EXPIRY DATE

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages