-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.feed
126 lines (126 loc) · 178 KB
/
index.feed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{
"version" : "https://jsonfeed.org/version/1.1",
"title" : "Bearman.NL",
"description": "This is the blog of Mike Beerman. The views and opinions expressed here are only those of the author and do not represent those of any organization or any individual with whom the author may be associated, professionally or personally.",
"home_page_url" : "https://bearman.nl/",
"feed_url" : "https://bearman.nl/index.feed",
"icon" : "https://bearman.nl/apple-touch-icon.png",
"favicon" : "https://bearman.nl/favicon.ico",
"author" : {
"name" : "Mike Beerman",
"url": "https://github.com/bearmannl",
"avatar": "https://bearman.nl/images/bnl_logo-100x100.png"
},
"items" : [
{
"title" : "PEaC Gen AI Usage",
"date_published" : "2024-10-13T20:50:00+02:00",
"date_modified" : "2024-10-13T20:50:00+02:00",
"id" : "https://bearman.nl/2024/10/13/peac-gen-ai-usage/",
"url" : "https://bearman.nl/2024/10/13/peac-gen-ai-usage/",
"summary": "Prompt Engineering as Code: AI Memory Transfer and Reusable Instructions\rIntroductionIn the rapidly evolving field of artificial intelligence, efficiency and consistency are paramount. Borrowing from the successes of methodologies like Infrastructure as Code (IaC) and Documentation as Code (Docs as Code), we can enhance AI interactions by treating prompts and context as code artifacts. This approach introduces two innovative concepts under one banner:\nPrompt Seed: Capturing and transferring AI interaction contexts in code format.",
"content_html" : "\u003ch1 id=\"prompt-engineering-as-code-ai-memory-transfer-and-reusable-instructions\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#prompt-engineering-as-code-ai-memory-transfer-and-reusable-instructions\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Prompt Engineering as Code: AI Memory Transfer and Reusable Instructions\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003ePrompt Engineering as Code: AI Memory Transfer and Reusable Instructions\u003c/strong\u003e\u003c/h1\u003e\u003ch2 id=\"introduction\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#introduction\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Introduction\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eIntroduction\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003eIn the rapidly evolving field of artificial intelligence, efficiency and consistency are paramount. Borrowing from the successes of methodologies like Infrastructure as Code (IaC) and Documentation as Code (Docs as Code), we can enhance AI interactions by treating prompts and context as code artifacts. This approach introduces two innovative concepts under one banner:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003ePrompt Seed\u003c/strong\u003e: Capturing and transferring AI interaction contexts in code format.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePrompt Instruction\u003c/strong\u003e: Storing and managing prompt templates as reusable code components.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eBy unifying these under the umbrella of \u003cstrong\u003ePrompt Engineering as Code (PEaC)\u003c/strong\u003e, we can apply best practices from software development to AI prompt management, enabling version control, collaboration, and scalability.\u003c/p\u003e\n\u003ch2 id=\"1-prompt-seed\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#1-prompt-seed\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;1. Prompt Seed\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003e1. Prompt Seed\u003c/strong\u003e\u003c/h2\u003e\u003ch3 id=\"concept-overview\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#concept-overview\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Concept Overview\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eConcept Overview\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003ePrompt Seed\u003c/strong\u003e involves exporting the AI\u0026rsquo;s current user-specific context into a standardized, code-friendly format (like JSON or Markdown). This \u0026ldquo;seed\u0026rdquo; can be imported by another AI model or instance, allowing it to restore the context and continue the interaction seamlessly. In essence, this would be a memory transfer from one instance to the next, without having to rebuild context over time.\u003c/p\u003e\n\u003ch3 id=\"benefits\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#benefits\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Benefits\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eBenefits\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eContext Continuity\u003c/strong\u003e: Transfer your personalized AI experience across different models or accounts.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVersion Control\u003c/strong\u003e: Use Git repositories to track changes to your AI context over time.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCollaboration\u003c/strong\u003e: Share context seeds with team members to align AI interactions.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBackup and Restore\u003c/strong\u003e: Safeguard your AI settings and preferences against data loss.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"parameterization\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#parameterization\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Parameterization\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eParameterization\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eJust as in IaC, thing like sensitive data, personally identifiable information (PII), and secrets should be parameterized. This involves replacing sensitive parts of the context seed with placeholders (parameters) that can be injected when needed. This can also be used to pass along parameters that change at deployment time, like specifics for different AI models. By doing so:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe core context template remains reusable and safe to share.\u003c/li\u003e\n\u003cli\u003eSensitive information is only introduced during the interaction or deployment.\u003c/li\u003e\n\u003cli\u003eYou can use tokenization or environment-based secrets to keep data secure.\u003c/li\u003e\n\u003cli\u003eYou can modularize the context template to take specific instructions for different models like going from Open AI to Claude for example.\u003c/li\u003e\n\u003cli\u003eVersioning can also be used to adapt the context to specific model versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"implementation\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#implementation\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Implementation\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eImplementation\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eStandardized Format\u003c/strong\u003e: Define a schema for the context data (e.g., YAML, JSON).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eExport/Import Tools\u003c/strong\u003e: Develop scripts or use existing tools to serialize and deserialize the AI context.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSecurity Measures\u003c/strong\u003e: Encrypt sensitive information and parameterize sensitive data within the context seed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIntegration with Version Control\u003c/strong\u003e: Store context files in repositories for change tracking and collaboration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"use-case-example\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#use-case-example\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Use Case Example\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eUse Case Example\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eA user switches from one AI platform to another. By exporting their context seed from the old platform and importing it into the new one, they retain personalized settings, preferences, and interaction history. Sensitive information, such as authentication tokens or private preferences, can be parameterized and safely injected during deployment.\u003c/p\u003e\n\u003ch2 id=\"2-prompt-instruction\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#2-prompt-instruction\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;2. Prompt Instruction\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003e2. Prompt Instruction\u003c/strong\u003e\u003c/h2\u003e\u003ch3 id=\"concept-overview-1\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#concept-overview-1\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Concept Overview\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eConcept Overview\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003ePrompt Instruction\u003c/strong\u003e focuses on creating, storing, and managing AI prompts as code artifacts. By treating prompts like code, users can apply software development practices to improve and reuse them efficiently.\u003c/p\u003e\n\u003cp\u003e\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/2024/10/13/peac-gen-ai-usage/peac-flow.jpg\" srcset=\"/2024/10/13/peac-gen-ai-usage/peac-flow_hu9e0d5b3ca830d40e8217b0773f679250_396156_800x0_resize_q75_h2_box.webp 800w, /2024/10/13/peac-gen-ai-usage/peac-flow_hu9e0d5b3ca830d40e8217b0773f679250_396156_1200x0_resize_q75_h2_box.webp 1200w, /2024/10/13/peac-gen-ai-usage/peac-flow_hu9e0d5b3ca830d40e8217b0773f679250_396156_1600x0_resize_q75_h2_box.webp 1600w\" sizes=\"auto\" alt=\"peac-flow\" height=\"1024\" width=\"1792\"\u003e\u003c/p\u003e\n\u003ch3 id=\"benefits-1\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#benefits-1\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Benefits\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eBenefits\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eReusability\u003c/strong\u003e: Develop a library of prompts that can be reused across projects.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConsistency\u003c/strong\u003e: Ensure uniformity in AI interactions within a team or organization.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCollaboration\u003c/strong\u003e: Share and improve prompts collaboratively using version control systems.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAutomation\u003c/strong\u003e: Integrate prompts into scripts and workflows for automated AI tasks.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVersioning\u003c/strong\u003e: Integrating versioning into the prompts will allow tailoring of prompt instructions to specific models, to avoid breaking changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"parameterization-1\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#parameterization-1\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Parameterization\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eParameterization\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003ePrompts can be parameterized by using placeholders that are filled during execution. This allows for greater flexibility and adaptability:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDynamic Prompts\u003c/strong\u003e: Replace key parts of a prompt with parameters that are filled based on user input or deployment context.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePipeline Integration\u003c/strong\u003e: Parameters can be injected through automated pipelines, similar to how environment variables are used in software deployment.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"implementation-1\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#implementation-1\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Implementation\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eImplementation\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eTemplate Creation\u003c/strong\u003e: Write prompts in code files with placeholders for dynamic content.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVersion Control\u003c/strong\u003e: Use Git to manage changes, branches, and merges of prompt templates.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e: Comment and document prompts for clarity and ease of use.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIntegration Tools\u003c/strong\u003e: Develop or use plugins to insert prompts directly into AI interfaces from code repositories. This might be achieved through (YAML) pipelines.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"use-case-example-1\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#use-case-example-1\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Use Case Example\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eUse Case Example\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eA team frequently needs to generate PowerPoint presentation outlines. By creating a well-crafted prompt template stored in a repository, any team member can quickly generate outlines by using the template, ensuring efficiency and consistency. Parameterized sections of the prompt can be filled by team members based on specific presentation topics or target audiences.\u003c/p\u003e\n\u003ch2 id=\"3-unified-concept-prompt-engineering-as-code-peac\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#3-unified-concept-prompt-engineering-as-code-peac\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;3. Unified Concept: Prompt Engineering as Code (PEaC)\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003e3. Unified Concept: Prompt Engineering as Code (PEaC)\u003c/strong\u003e\u003c/h2\u003e\u003ch3 id=\"rationale\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#rationale\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Rationale\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eRationale\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eCombining both concepts under \u003cstrong\u003ePrompt Engineering as Code\u003c/strong\u003e creates a comprehensive framework for managing AI interactions. PEaC emphasizes the importance of treating both the AI\u0026rsquo;s context and the prompts we use as code artifacts that can be versioned, shared, and improved upon.\u003c/p\u003e\n\u003ch3 id=\"key-principles\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#key-principles\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Key Principles\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eKey Principles\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eModularity\u003c/strong\u003e: Break down prompts and contexts into reusable components.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStandardization\u003c/strong\u003e: Use consistent formats and schemas for prompts and context seeds.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCollaboration\u003c/strong\u003e: Leverage platforms like GitHub or GitLab for sharing and collaborative development.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAutomation\u003c/strong\u003e: Integrate with CI/CD pipelines for automated testing and deployment of prompts.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eParameterization\u003c/strong\u003e: Securely manage sensitive information through tokenization and parameter injection.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"4-applying-best-practices-from-as-code-methodologies\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#4-applying-best-practices-from-as-code-methodologies\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;4. Applying Best Practices from \u0026amp;ldquo;as Code\u0026amp;rdquo; Methodologies\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003e4. Applying Best Practices from \u0026ldquo;as Code\u0026rdquo; Methodologies\u003c/strong\u003e\u003c/h2\u003e\u003ch3 id=\"version-control\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#version-control\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Version Control\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eVersion Control\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eBranching Strategies\u003c/strong\u003e: Use feature branches for prompt development and merge them after review.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCommit Messages\u003c/strong\u003e: Write clear messages to document changes in prompts or context seeds.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePull Requests\u003c/strong\u003e: Review changes collaboratively to maintain quality.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"testing\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#testing\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Testing\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eTesting\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAutomated Testing\u003c/strong\u003e: Develop scripts to test prompts with different inputs and validate outputs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eContinuous Integration\u003c/strong\u003e: Integrate testing into the CI pipeline to catch issues early.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRelease Stages\u003c/strong\u003e: Employ stages to validate prompt code changes in different environments before release them to production agents.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"documentation\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#documentation\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Documentation\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eInline Comments\u003c/strong\u003e: Document the purpose and usage of prompts within the code.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eREADME Files\u003c/strong\u003e: Provide overviews and instructions in repository README files.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eChange Logs\u003c/strong\u003e: Maintain logs to track significant updates or changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"security\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#security\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Security\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAccess Control\u003c/strong\u003e: Restrict repository access to authorized users.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSensitive Data Handling\u003c/strong\u003e: Parameterize sensitive information and inject it during execution.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCompliance\u003c/strong\u003e: Ensure practices comply with data protection regulations (e.g., GDPR).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"5-potential-challenges-and-solutions\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#5-potential-challenges-and-solutions\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;5. Potential Challenges and Solutions\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003e5. Potential Challenges and Solutions\u003c/strong\u003e\u003c/h2\u003e\u003ch3 id=\"challenge-1-model-compatibility\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#challenge-1-model-compatibility\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Challenge 1: Model Compatibility\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eChallenge 1: Model Compatibility\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003eIssue\u003c/strong\u003e: Different AI models may interpret prompts or context seeds differently.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSolution\u003c/strong\u003e: Establish compatibility layers or adapters for different AI models, or maintain model-specific branches of prompts and contexts. Potentially use parameters to this end as well.\u003c/p\u003e\n\u003ch3 id=\"challenge-2-privacy-concerns\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#challenge-2-privacy-concerns\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Challenge 2: Privacy Concerns\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eChallenge 2: Privacy Concerns\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003eIssue\u003c/strong\u003e: Storing user contexts may expose personal data.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSolution\u003c/strong\u003e: Implement data anonymization and encryption. Parameterize sensitive information and obtain necessary consents. Storing secrets in code is a well known bad practice.\u003c/p\u003e\n\u003ch3 id=\"challenge-3-community-adoption\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#challenge-3-community-adoption\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;Challenge 3: Community Adoption\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eChallenge 3: Community Adoption\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003eIssue\u003c/strong\u003e: Gaining widespread acceptance for the methodology.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSolution\u003c/strong\u003e: Demonstrate value through case studies, encourage open-source contributions, and provide easy-to-use tools.\u003c/p\u003e\n\u003ch2 id=\"6-conclusion\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#6-conclusion\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;6. Conclusion\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003e6. Conclusion\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003e\u003cstrong\u003ePrompt Engineering as Code\u003c/strong\u003e represents a significant step forward in managing AI interactions. By applying proven software development practices, we can enhance efficiency, promote collaboration, and ensure consistency in how we interact with AI systems.\u003c/p\u003e\n\u003cp\u003eBefore this concept can be brought to its \u003cem\u003epeak\u003c/em\u003e, the following steps are still needed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eExperimentation\u003c/strong\u003e: By exporting AI context and creating prompt templates, and continually evolving their efficacy.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTool Development\u003c/strong\u003e: Develop or contribute to tools that facilitate PEaC practices.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCommunity Engagement\u003c/strong\u003e: Sharing experiences and improvements with the community to really consolidate the practice in the field of prompt engineering.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAs soon as I have a working example of the concept I will upload it to my GitHub as a follow-up to this post!\u003c/p\u003e\n",
"language": "en"
},
{
"title" : "Generation GovTech",
"date_published" : "2024-09-08T11:00:00+02:00",
"date_modified" : "2024-09-08T11:00:00+02:00",
"id" : "https://bearman.nl/2024/09/08/generation-govtech/",
"url" : "https://bearman.nl/2024/09/08/generation-govtech/",
"summary": "Generation GovTech\rIntroductionThis post introduces a new term, Generation GovTech, or GenGT for short.\nYou\u0026rsquo;ll find a full description of this term below. To explain it fully, we\u0026rsquo;ll first cover the recruitment campaign by the Dutch Ministry of Defense: Generation D\nGeneration DIn 2022, the MoD launched the recruitment campaign Generation D. The campaign aimed to attract people with a specific mindset. This mindset includes individuals who want to do meaningful work, believe in cooperation, and seek personal growth.",
"content_html" : "\u003ch1 id=\"generation-govtech\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#generation-govtech\" class=\"header-mark\" aria-label=\"Header mark for 'Generation GovTech'\"\u003e\u003c/a\u003eGeneration GovTech\u003c/h1\u003e\u003ch2 id=\"introduction\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#introduction\" class=\"header-mark\" aria-label=\"Header mark for 'Introduction'\"\u003e\u003c/a\u003eIntroduction\u003c/h2\u003e\u003cp\u003eThis post introduces a new term, Generation GovTech, or GenGT for short.\u003c/p\u003e\n\u003cp\u003eYou\u0026rsquo;ll find a full description of this term below. To explain it fully, we\u0026rsquo;ll first cover the recruitment campaign by the Dutch Ministry of Defense: \u003ca href=\"https://werkenbijdefensie.nl/generatie-d\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGeneration D\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"generation-d\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#generation-d\" class=\"header-mark\" aria-label=\"Header mark for 'Generation D'\"\u003e\u003c/a\u003eGeneration D\u003c/h3\u003e\u003cp\u003eIn 2022, the MoD launched the \u003ca href=\"https://www.defensie.nl/actueel/nieuws/2022/04/20/wervingscampagne-richt-zich-op-generatie-d\" target=\"_blank\" rel=\"noopener noreferrer\"\u003erecruitment campaign Generation D\u003c/a\u003e. The campaign aimed to attract people with a specific mindset. This mindset includes individuals who want to do meaningful work, believe in cooperation, and seek personal growth.\u003c/p\u003e\n\u003cp\u003eThe campaign\u0026rsquo;s core principle is admirable. In 2023, it \u003ca href=\"https://www.defensie.nl/actueel/nieuws/2023/11/17/defensie-wint-effie-award-met-arbeidsmarktcampagne-generatie-d\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ewon the Effie award\u003c/a\u003e for its strong message of a shared mindset. The numbers showed a 71% increase in web traffic and a 30% rise in job applications.\u003c/p\u003e\n\u003cp\u003eThe campaign is worth examining due to its strong message, regardless of the Defense department context. It unifies people with a common goal. The impressive numbers highlight why the concept is compelling.\u003c/p\u003e\n\u003cp\u003eInitially aimed at young adults, the campaign has become a mindset not tied to age. It inspires anyone to work towards a common goal. This serves as a jumping-off point for Generation GovTech.\u003c/p\u003e\n\u003ch3 id=\"govtech\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#govtech\" class=\"header-mark\" aria-label=\"Header mark for 'GovTech'\"\u003e\u003c/a\u003eGovTech\u003c/h3\u003e\u003cp\u003eGovTech describes technological initiatives and innovations within the government sector. Unlike Generation D, it wasn\u0026rsquo;t conceived as a mindset. However, it embodies core principles such as:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eCitizen-Centric Technology Solutions\u003c/strong\u003e: Delivering technology solutions that improve citizens\u0026rsquo; experiences and needs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eInnovation in Public Services\u003c/strong\u003e: Embracing digital transformation to enhance public services.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTech-Savvy Mindset\u003c/strong\u003e: Attracting public service professionals to a community of tech-savvy peers.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eGovTech gained traction around 2016, \u003ca href=\"https://www.govocal.com/blog/whats-difference-civic-tech-govtech\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eovertaking the term Civic Tech\u003c/a\u003e. This shift is linked to the rebranding of the \u003ca href=\"https://en.wikipedia.org/wiki/Government_Technology_Agency\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGovernment Technology Agency in Singapore\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIn the Netherlands, \u003ca href=\"https://govtechglobal.org/govtech-nl\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGovTech NL was launched in 2018\u003c/a\u003e by the Dutch Ministry of the Interior and Kingdom Relations. It is now part of the \u003ca href=\"https://govtechglobal.org/aboutus\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGovTech Global Alliance\u003c/a\u003e, which rebranded from The Civtech Alliance.\u003c/p\u003e\n\u003cp\u003eIn 2021, the City of The Hague and the Ministry of the Interior and Kingdom Relations \u003ca href=\"https://www.government.nl/documents/reports/2021/06/30/govtech-in-the-netherlands\" target=\"_blank\" rel=\"noopener noreferrer\"\u003epublished a report\u003c/a\u003e on GovTech in the Netherlands. The report shows how the Netherlands fosters partnerships between innovators and public authorities, a trend named \u0026lsquo;GovTech.\u0026rsquo;\u003c/p\u003e\n\u003cp\u003eTo achieve better partnerships between innovators and public authorities, we need cultural change. While organizations need to change, it is the people who make this happen.\u003c/p\u003e\n\u003ch3 id=\"ecosystems--mindset\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#ecosystems--mindset\" class=\"header-mark\" aria-label=\"Header mark for 'Ecosystems \u0026amp;amp; Mindset'\"\u003e\u003c/a\u003eEcosystems \u0026amp; Mindset\u003c/h3\u003e\u003cp\u003eTo wrap up this introduction, people need to adopt a common mindset. Innovators can lead in adopting the GovTech mindset, but the goal is to establish better partnerships between innovators and public authorities.\u003c/p\u003e\n\u003cp\u003eInstead of adopting this mindset one \u0026lsquo;customer \u0026amp; vendor\u0026rsquo; relationship at a time, we should work towards the entire ecosystem around public authorities. As more ecosystem members adopt the GovTech mindset, we shape a generation where GovTech is the common mindset.\u003c/p\u003e\n\u003ch2 id=\"adoption-of-generation-govtech\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#adoption-of-generation-govtech\" class=\"header-mark\" aria-label=\"Header mark for 'Adoption of Generation GovTech'\"\u003e\u003c/a\u003eAdoption of Generation GovTech\u003c/h2\u003e\u003cp\u003eAdopting the Generation GovTech mindset has transformative potential. By focusing on citizen-centric public services, creating a transparent ecosystem, and advocating for change, we can unify people around this mindset.\u003c/p\u003e\n\u003cp\u003eTo instigate this change, I propose the following actions as our common roadmap to make GovTech even more successful.\u003c/p\u003e\n\u003ch3 id=\"1-vision-and-goals\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#1-vision-and-goals\" class=\"header-mark\" aria-label=\"Header mark for '1. Vision and Goals'\"\u003e\u003c/a\u003e1. Vision and Goals\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eVision\u003c/strong\u003e: Generation GovTech stands for innovation, efficiency, transparency, and citizen-centric services in public services.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGoals\u003c/strong\u003e: Inspire people to adopt this mindset and advocate for it within the public services space.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"2-engaging-stakeholders\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#2-engaging-stakeholders\" class=\"header-mark\" aria-label=\"Header mark for '2. Engaging Stakeholders'\"\u003e\u003c/a\u003e2. Engaging Stakeholders\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEngage Key Players\u003c/strong\u003e: Involve public authorities and technology vendors. Form a coalition of champions passionate about GovTech.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"3-culture-of-innovation\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#3-culture-of-innovation\" class=\"header-mark\" aria-label=\"Header mark for '3. Culture of Innovation'\"\u003e\u003c/a\u003e3. Culture of Innovation\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eExperiential Learning\u003c/strong\u003e: Deliver often, fail safely, and learn by doing. Create safe spaces for innovation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEducation and Training\u003c/strong\u003e: Provide adequate support at all levels to enable innovation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"4-inspire-and-share-success\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#4-inspire-and-share-success\" class=\"header-mark\" aria-label=\"Header mark for '4. Inspire and Share Success'\"\u003e\u003c/a\u003e4. Inspire and Share Success\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLead by Example\u003c/strong\u003e: Celebrate success and inspire people to unify under the GovTech mindset.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"5-work-with-iterative-steps\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#5-work-with-iterative-steps\" class=\"header-mark\" aria-label=\"Header mark for '5. Work with Iterative Steps'\"\u003e\u003c/a\u003e5. Work with Iterative Steps\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAgile Practices\u003c/strong\u003e: Demonstrate success in incremental steps. Show iterative success at a rapid pace. Make Generation GovTech part of daily practice.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"6-continuous-improvement\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#6-continuous-improvement\" class=\"header-mark\" aria-label=\"Header mark for '6. Continuous Improvement'\"\u003e\u003c/a\u003e6. Continuous Improvement\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRegular Reviews\u003c/strong\u003e: Regularly review and refine strategies. High-paced innovation requires frequent reviews.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"7-build-a-community\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#7-build-a-community\" class=\"header-mark\" aria-label=\"Header mark for '7. Build a Community'\"\u003e\u003c/a\u003e7. Build a Community\u003c/h3\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEstablish Networks\u003c/strong\u003e: Create networks within the ecosystem. Encourage cross-department and cross-sector collaboration. Public authorities and technology vendors should promote innovation and share success stories.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"conclusion\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#conclusion\" class=\"header-mark\" aria-label=\"Header mark for 'Conclusion'\"\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eGeneration GovTech represents a transformative mindset for public services. By adopting this mindset, we can create a transparent, innovative, and citizen-centric ecosystem. Engaging stakeholders, fostering a culture of innovation, and working iteratively will drive this change. Continuous improvement and community building are essential to sustain this transformation. Together, we can shape a generation where GovTech is the common mindset, leading to better public services and stronger partnerships between innovators and public authorities.\u003c/p\u003e\n",
"language": "en"
}
{
"title" : "Co Source - Renamed Source Code Sharing Strategy",
"date_published" : "2024-07-21T12:00:00+02:00",
"date_modified" : "2024-07-21T12:00:00+02:00",
"id" : "https://bearman.nl/2024/07/21/co-source-renaming/",
"url" : "https://bearman.nl/2024/07/21/co-source-renaming/",
"summary": "Co source\rIntro\rProtected Inner Source RecapProtected Inner Source is a source code sharing strategy that defines an intermediate model between Open Source and Inner Source. The analogy used here is that C# Access Modifiers define a \u0026lsquo;Protected Internal Class\u0026rsquo; as an intermediate between \u0026lsquo;Public Class\u0026rsquo; and \u0026lsquo;Internal Class\u0026rsquo;. The purpose of which is to be more closed off between assemblies than \u0026lsquo;Public Class\u0026rsquo;, yet more open for reuse than \u0026lsquo;Internal Class\u0026rsquo;.",
"content_html" : "\u003ch1 id=\"co-source\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#co-source\" class=\"header-mark\" aria-label=\"Header mark for 'Co source'\"\u003e\u003c/a\u003eCo source\u003c/h1\u003e\u003ch2 id=\"intro\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#intro\" class=\"header-mark\" aria-label=\"Header mark for 'Intro'\"\u003e\u003c/a\u003eIntro\u003c/h2\u003e\u003ch3 id=\"protected-inner-source-recap\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#protected-inner-source-recap\" class=\"header-mark\" aria-label=\"Header mark for 'Protected Inner Source Recap'\"\u003e\u003c/a\u003eProtected Inner Source Recap\u003c/h3\u003e\u003cp\u003eProtected Inner Source is a source code sharing strategy that defines an intermediate model between Open Source and Inner Source. The analogy used here is that \u003ca href=\"https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers#summary-table\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eC# Access Modifiers\u003c/a\u003e define a \u0026lsquo;Protected Internal Class\u0026rsquo; as an intermediate between \u0026lsquo;Public Class\u0026rsquo; and \u0026lsquo;Internal Class\u0026rsquo;. The purpose of which is to be more closed off between assemblies than \u0026lsquo;Public Class\u0026rsquo;, yet more open for reuse than \u0026lsquo;Internal Class\u0026rsquo;.\u003c/p\u003e\n\u003cp\u003eIf you would like to read the previous article, please find it here: \u003ca href=\"/2024/06/20/open-inner-protected-source/\" rel=\"\"\u003eOpen Source - Inner Source - Protected Inner Source\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"source-code-sharing-strategies\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#source-code-sharing-strategies\" class=\"header-mark\" aria-label=\"Header mark for 'Source Code Sharing Strategies'\"\u003e\u003c/a\u003eSource Code Sharing Strategies\u003c/h2\u003e\u003cp\u003eSo what are source code sharing strategies anyway? Glad you asked! \u0026#x1f447;\u003c/p\u003e\n\u003cp\u003eSource code sharing strategies refer to the various methods and practices used to distribute and collaborate on software code. These strategies determine who can access the code, how it can be modified, and the level of transparency involved. Understanding these strategies is crucial for organizations to effectively manage their software development processes and foster collaboration \u0026#x1f91d; \u0026amp; innovation \u0026#x1f4a1;.\u003c/p\u003e\n\u003ch3 id=\"types-of-source-code-sharing-strategies\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#types-of-source-code-sharing-strategies\" class=\"header-mark\" aria-label=\"Header mark for 'Types of Source Code Sharing Strategies'\"\u003e\u003c/a\u003eTypes of Source Code Sharing Strategies\u003c/h3\u003e\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eOpen Source\u003c/strong\u003e: This strategy allows anyone to view, modify, and distribute the code. It promotes transparency and community collaboration. Popular examples include Linux and Apache. More about Open Source can be found \u003ca href=\"https://en.wikipedia.org/wiki/Open-source-software_movement\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehere on Wikipedia\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eInner Source\u003c/strong\u003e: Inner Source applies Open Source practices within an organization. It enables teams to collaborate across departmental boundaries while keeping the code private to the organization. This approach enhances code quality and innovation by leveraging internal expertise. More about Inner Source can be found \u003ca href=\"https://en.wikipedia.org/wiki/Inner_source\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehere on Wikipedia\u003c/a\u003e or \u003ca href=\"https://github.com/resources/articles/software-development/innersource\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehere on GitHub\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eClosed Source\u003c/strong\u003e: Also known as proprietary software, this strategy restricts access to the source code. Only authorized individuals or teams within the organization can view or modify the code. This approach is often used to protect intellectual property and maintain control over the software. How Closed Source compares to Open Source is described in further detail \u003ca href=\"https://en.wikipedia.org/wiki/Comparison_of_open-source_and_closed-source_software\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehere on Wikipedia\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u0026#x1f680; \u003cstrong\u003eCo Source\u003c/strong\u003e \u0026#x1f680;: The newly proposed hybrid strategy that allows sharing among certain trusted (or federated) organizations. These organizations operate independently but share a common \u0026#x1f91d; trust boundary \u0026#x1f91d;, similar to how Protected Internal classes work in C#. This strategy promotes collaboration \u003cem\u003ewithout specifically touching on security within the OSS space\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eEach of these strategies has its own set of benefits and challenges, and the choice of strategy depends on the specific needs and goals of the organization.\u003c/p\u003e\n\u003cp\u003eFor a more detailed overview of source code and its management, you can refer to the \u003ca href=\"https://en.wikipedia.org/wiki/Source_code\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eWikipedia page on Source Code\u003c/a\u003e.\u003c/p\u003e\n\u003ch3 id=\"name-change-to-co-source\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#name-change-to-co-source\" class=\"header-mark\" aria-label=\"Header mark for 'Name Change to Co Source'\"\u003e\u003c/a\u003eName Change to Co Source\u003c/h3\u003e\u003ch2 id=\"co-source-reintroduction\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#co-source-reintroduction\" class=\"header-mark\" aria-label=\"Header mark for 'Co Source Reintroduction'\"\u003e\u003c/a\u003eCo Source Reintroduction\u003c/h2\u003e\u003cp\u003eI received feedback on the name \u0026lsquo;\u003cem\u003eProtected\u003c/em\u003e Inner Source\u0026rsquo;. It was mentioned that the label \u003cem\u003eprotected\u003c/em\u003e seemed to imply Open Source and Inner Source are not secure \u0026#x1f512;. This was and is not the intent!\u003c/p\u003e\n\u003cp\u003eIn order to come up with a better name I had considered Federated Source, Trusted Source, Collaborative Source, Cooperative Source\u0026hellip; and have decided on Co Source. The term \u0026lsquo;Co\u0026rsquo; suggests both collaboration and cooperation, which aligns well with the idea of shared source code among trusted entities. It also keeps it clean and neat in daily use \u0026#x1f604;\u003c/p\u003e\n\u003cp\u003eIn the modern world of IT, many aspects of our industry are being changed by rapidly evolving (software) engineering innovations. The pace at which this happens has been impacted by Open Source ways of working, among others. What has become clear, is that these ways of working can have a drastic impact on the ability to innovate in any system.\u003c/p\u003e\n\u003cp\u003eIn bridging organizational design (often business driven) and systems design (often technology driven), Co Source can help bring many benefits. Innovation can benefit especially much, as a core pillar behind the ability for organizations to change. It can drive organizations to change their culture in a way that makes them able to stay ahead of the curve. Competitive advantage driven by a culture of technological innovation.\u003c/p\u003e\n\u003cp\u003eEspecially within organizations that do not have IT as their core business, it can be hard to adopt such a culture. Still, even for strictly business driven organizations it brings massive benefits. As Cloud has shown us in the past 10+ years, and as (Gen) AI keeps showing in the past 1-2 years, the impact is profound.\u003c/p\u003e\n\u003cp\u003eTo those organizations that struggle to adopt these technology driven cultural changes, I would advise to consider enabling a culture around Open Source ways of working. Why? It enables individuals within those organizations with the freedom to demonstrate the benefits with concrete delivery of added value through innovation.\u003c/p\u003e\n\u003cp\u003eAs more individuals in the organizations demonstrate added value and potentially massive impact on the bottom line, a platform of cultural growth is born.\u003c/p\u003e\n\u003cp\u003eDoes that mean the Open Source ways of working need to be adopted specifically in that form? No, this is exactly why Inner Source was conceived to begin with.\u003c/p\u003e\n\u003cp\u003eNow to the point of Co Source. Organizations that have complex but trusted ecosystems such as government organizations, you can gain traction at an accelerated rate beyond what Inner Source enables \u003cem\u003ewithin a single organization\u003c/em\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable a cultural shift towards one of technology innovation.\u003c/li\u003e\n\u003cli\u003eSee demonstrated added value through delivery of early innovation scenarios.\u003c/li\u003e\n\u003cli\u003eScale this process by embracing the success of this \u003cem\u003ewave of success\u003c/em\u003e through technology innovation culture.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"security-implications-or-not\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#security-implications-or-not\" class=\"header-mark\" aria-label=\"Header mark for 'Security Implications (or not)'\"\u003e\u003c/a\u003eSecurity Implications (or not)\u003c/h2\u003e\u003cp\u003eTo reiterate, Protected Inner Source was not meant to imply Open Source is not secure. There are security challenges as with any strategy, and those can be managed in accordance with the relevant situation. Similarly, Co Source should still leverage best practices and proper design thinking to determine what works best when implementing this strategy.\u003c/p\u003e\n\u003ch3 id=\"open-source-and-inner-source-security-best-practices\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#open-source-and-inner-source-security-best-practices\" class=\"header-mark\" aria-label=\"Header mark for 'Open Source and Inner Source Security Best Practices'\"\u003e\u003c/a\u003eOpen Source and Inner Source Security Best Practices\u003c/h3\u003e\u003cp\u003eAs Co Source was introduced to introduce a new way of working within certain organizations or ecosystems, I will gladly refer to existing best practices in the OSS Security space. For instance, review the \u003ca href=\"https://openssf.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOpenSSF\u003c/a\u003e article on \u003ca href=\"https://en.wikipedia.org/wiki/Comparison_of_open-source_and_closed-source_software\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eStrengthening Open Source Software: Best Practices for Enhanced Security\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"example-and-applications\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#example-and-applications\" class=\"header-mark\" aria-label=\"Header mark for 'Example and Applications'\"\u003e\u003c/a\u003eExample and Applications\u003c/h2\u003e\u003cp\u003eAs a specialist in #GovTech, I am primarily fueled by a vision of rapidly accelerating innovation in the public sector. Within the public sector, in any single nation like the United States or group of nations like the European Union, there are massive potential gains to be made by increased collaboration. Embracing the culture of technological innovation is at least one avenue towards to rapidly accelerate towards those potential gains.\u003c/p\u003e\n\u003cp\u003eHow would this work? From any group of government organizations, setup collaboration through Co Source repositories and start demonstrating added value. Not just added value for the (government) organizations, but also to the citizens these organizations serve.\u003c/p\u003e\n\u003cp\u003eEven competing IT vendors working within the public sector can embrace the concept of \u003ca href=\"https://en.wikipedia.org/wiki/Coopetition\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eCoopetition\u003c/a\u003e through Co Source. In doing so, we all improve the impact the public sector has on society as a whole.\u003c/p\u003e\n\u003ch2 id=\"conclusion\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#conclusion\" class=\"header-mark\" aria-label=\"Header mark for 'Conclusion'\"\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eCo Source has the potential to revolutionize collaborative development within an ecosystem of trusted organizations. By combining the innovative nature of Open Source with the organizational boundaries of Inner Source, Co Source offers a unique model that can be particularly beneficial for government organizations in the public sector. This approach allows these organizations to share resources efficiently and securely, fostering a culture of collaboration and innovation.\u003c/p\u003e\n\u003cp\u003eIn a world where ecosystems are becoming increasingly prominent, Co Source enables organizations to build upon trusted relationships in source code sharing strategies. By establishing a culture of collaboration \u0026#x1f91d; and innovation \u0026#x1f4a1;, organizations can drive technological advancements and achieve significant benefits. Embrace Co Source to unlock the full potential of collaborative development and propel your organization towards a future of innovation \u0026#x1f680;!\u003c/p\u003e\n",
"language": "en"
},
{
"title" : "Open Source - Inner Source - Protected Inner Source",
"date_published" : "2024-06-20T21:30:00+02:00",
"date_modified" : "2024-06-20T21:30:00+02:00",
"id" : "https://bearman.nl/2024/06/20/open-inner-protected-source/",
"url" : "https://bearman.nl/2024/06/20/open-inner-protected-source/",
"summary": "Protected Inner SourceUPDATE: Based on feedback, I am changing the name of this source code sharing strategy to \u0026lsquo;Co Source\u0026rsquo;. The direct analogy between Protected Internal Class and Protected Inner Source seemed to imply a lack of security in traditional Open Source sharing strategies, which was not my intent. Read more about the naming change in my follow-up article here: Co Source - Renamed Source Code Sharing Strategy\nIntro\rInner sourceIn the digital era, software development is a cornerstone of innovation.",
"content_html" : "\u003ch1 id=\"protected-inner-source\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#protected-inner-source\" class=\"header-mark\" aria-label=\"Header mark for 'Protected Inner Source'\"\u003e\u003c/a\u003eProtected Inner Source\u003c/h1\u003e\u003cp\u003eUPDATE: Based on feedback, I am changing the name of this source code sharing strategy to \u0026lsquo;Co Source\u0026rsquo;. The direct analogy between Protected Internal Class and Protected Inner Source seemed to imply a lack of security in traditional Open Source sharing strategies, which was not my intent. Read more about the naming change in my follow-up article here: \u003ca href=\"/2024/07/21/co-source-renaming/\" rel=\"\"\u003eCo Source - Renamed Source Code Sharing Strategy\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"intro\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#intro\" class=\"header-mark\" aria-label=\"Header mark for 'Intro'\"\u003e\u003c/a\u003eIntro\u003c/h2\u003e\u003ch3 id=\"inner-source\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#inner-source\" class=\"header-mark\" aria-label=\"Header mark for 'Inner source'\"\u003e\u003c/a\u003eInner source\u003c/h3\u003e\u003cp\u003eIn the digital era, software development is a cornerstone of innovation. Inner Source has gained traction in this domain. It is a strategy that applies Open Source practices within an organization. Unlike Open Source, Inner Source is not public. It remains confined to a single organization. This approach encourages collaborative software development. Teams across the organization can contribute, regardless of departmental boundaries. Inner Source fosters a culture of transparency and shared responsibility. It leads to improved code quality and accelerated innovation. By leveraging Inner Source, companies can harness the collective expertise of their employees. They can do so while protecting proprietary code.\u003c/p\u003e\n\u003cp\u003eIf you\u0026rsquo;d like to read more about Inner Source, feel free to do so \u003ca href=\"https://en.wikipedia.org/wiki/Inner_source\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehere on Wikipedia\u003c/a\u003e.\u003c/p\u003e\n\u003ch3 id=\"access-modifiers\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#access-modifiers\" class=\"header-mark\" aria-label=\"Header mark for 'Access Modifiers'\"\u003e\u003c/a\u003eAccess Modifiers\u003c/h3\u003e\u003cp\u003eIn C#, access modifiers control access to the class and its members. They are essential for encapsulation. Public, protected, internal, and private are the primary modifiers. Each serves a unique purpose. Public classes are accessible from any other class. Protected classes are accessible within their own class and by derived class instances. Internal classes are accessible only within their own assembly. Private classes are restricted to the containing class.\u003c/p\u003e\n\u003cp\u003eTo understand the exact workings of access modifiers in C#, please reference \u003ca href=\"https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers#summary-table\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ethe Microsoft Learn article here\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"the-analogy-source-strategies-and-access-modifiers\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#the-analogy-source-strategies-and-access-modifiers\" class=\"header-mark\" aria-label=\"Header mark for 'The Analogy: Source Strategies and Access Modifiers'\"\u003e\u003c/a\u003eThe Analogy: Source Strategies and Access Modifiers\u003c/h2\u003e\u003cp\u003eAccess modifiers in C# can be compared to source sharing strategies. Internal classes resemble Inner Source, they are accessible within an organization. Consider the following:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpen Source code is available to \u003cem\u003eeveryone\u003c/em\u003e.\u003c/li\u003e\n\u003cli\u003eInner Source code is available \u003cem\u003eonly to those in one organization\u003c/em\u003e.\u003c/li\u003e\n\u003cli\u003eClosed Source code is strictly controlled, \u003cem\u003eonly available to a specific development team\u003c/em\u003e.\u003c/li\u003e\n\u003cli\u003eIn comparison, Public Classes are \u003cem\u003eopen to everyone\u003c/em\u003e, even from different assemblies (everyone in the world).\u003c/li\u003e\n\u003cli\u003eSimilarly, Internal Classes are closed to everyone, \u003cem\u003eexcept for classes in the same assembly\u003c/em\u003e (a single company).\u003c/li\u003e\n\u003cli\u003eFinally, Private classes are closed to everyone, \u003cem\u003eexcept for methods in the same class\u003c/em\u003e (a development team/department).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis analogy helps explain how code sharing works in relation to varying levels of accessibility.\u003c/p\u003e\n\u003ch2 id=\"protected-inner-source-1\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#protected-inner-source-1\" class=\"header-mark\" aria-label=\"Header mark for 'Protected Inner Source'\"\u003e\u003c/a\u003eProtected Inner Source\u003c/h2\u003e\u003ch3 id=\"a-novel-concept\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#a-novel-concept\" class=\"header-mark\" aria-label=\"Header mark for 'A Novel Concept'\"\u003e\u003c/a\u003eA Novel Concept\u003c/h3\u003e\u003cp\u003eProtected Inner Source, something I have not seen elsewhere so far, is akin to Protected Internal classes. It’s a hybrid access level. It allows sharing among certain trusted organizations. These organizations operate independently yet share a common trust boundary.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDerived classes from different assemblies. Analogous to separate organizations still \u003cem\u003eaffiliated to the same parent organization\u003c/em\u003e.\u003c/li\u003e\n\u003cli\u003eNon-derived classes from different assemblies, unaffiliated organizations have \u003cem\u003eno access\u003c/em\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/2024/06/20/open-inner-protected-source/protected-inner-source.png\" srcset=\"/2024/06/20/open-inner-protected-source/protected-inner-source_hu88a7aa0bd88db9d495d4bd63c26e1427_25272_800x0_resize_q75_h2_box_3.webp 800w, /2024/06/20/open-inner-protected-source/protected-inner-source_hu88a7aa0bd88db9d495d4bd63c26e1427_25272_1200x0_resize_q75_h2_box_3.webp 1200w, /2024/06/20/open-inner-protected-source/protected-inner-source_hu88a7aa0bd88db9d495d4bd63c26e1427_25272_1600x0_resize_q75_h2_box_3.webp 1600w\" sizes=\"auto\" alt=\"protected-inner-source-diagram\" height=\"222\" width=\"601\"\u003e\u003c/p\u003e\n\u003ch3 id=\"specific-applications\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#specific-applications\" class=\"header-mark\" aria-label=\"Header mark for 'Specific Applications'\"\u003e\u003c/a\u003eSpecific Applications\u003c/h3\u003e\u003cp\u003eWhile this may not apply to most organizations in the world, there are some specific examples:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePublic sector organizations (Federal, EU, etc.) often share (more) freely than private ones.\u003c/li\u003e\n\u003cli\u003ePrivate organizations with complex legal holdings, still sharing trust between sibling companies.\u003c/li\u003e\n\u003cli\u003eConsortiums, in any sector, might need to collaborate on specific source code with similar levels of trust.\u003c/li\u003e\n\u003cli\u003eSource code with low proprietary value, for instance, legacy applications out of support. A contracting company might be given access to take over ownership for specific purposes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/2024/06/20/open-inner-protected-source/protected-inner-source_gov-us.png\" srcset=\"/2024/06/20/open-inner-protected-source/protected-inner-source_gov-us_hua788ee3b411c55fd9d2df17370a9dfdd_447695_800x0_resize_q75_h2_box_3.webp 800w, /2024/06/20/open-inner-protected-source/protected-inner-source_gov-us_hua788ee3b411c55fd9d2df17370a9dfdd_447695_1200x0_resize_q75_h2_box_3.webp 1200w, /2024/06/20/open-inner-protected-source/protected-inner-source_gov-us_hua788ee3b411c55fd9d2df17370a9dfdd_447695_1600x0_resize_q75_h2_box_3.webp 1600w\" sizes=\"auto\" alt=\"protected-inner-source-gov-organogram\" height=\"1488\" width=\"2213\"\u003e\n\u003cem\u003ePlease note! This is an example of connected government departments, there was no validation done for this blog post to determine their levels of trust and ability to share code.\u003c/em\u003e\u003c/p\u003e\n\u003ch3 id=\"the-benefits\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#the-benefits\" class=\"header-mark\" aria-label=\"Header mark for 'The Benefits'\"\u003e\u003c/a\u003eThe Benefits\u003c/h3\u003e\u003cp\u003eProtected Inner Source offers several benefits:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIt promotes collaboration without compromising security.\u003c/li\u003e\n\u003cli\u003eIt reduces duplication of effort across organizations.\u003c/li\u003e\n\u003cli\u003eIt also accelerates innovation and development.\u003c/li\u003e\n\u003cli\u003eThis approach leverages the strengths of multiple entities.\u003c/li\u003e\n\u003cli\u003eIt does so while maintaining each entity’s autonomy.\u003c/li\u003e\n\u003cli\u003eIt provides traceability in modification of complex solutions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"considerations-for-implementation\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#considerations-for-implementation\" class=\"header-mark\" aria-label=\"Header mark for 'Considerations for implementation'\"\u003e\u003c/a\u003eConsiderations for implementation\u003c/h3\u003e\u003cp\u003eImplementing Protected Inner Source requires careful planning:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eTrust and Security\u003c/strong\u003e: How will organizations establish and maintain a trusted relationship? What security measures would be necessary to protect shared code from external threats?\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGovernance\u003c/strong\u003e: Who decides what gets shared and how contributions are managed? There might need to be a governance model that all parties agree upon.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eInteroperability\u003c/strong\u003e: How will the shared code be designed to ensure it is easily adaptable across different organizations’ systems?\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLegal and Compliance\u003c/strong\u003e: Are there legal or regulatory considerations when sharing code between such entities?\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"conclusion\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#conclusion\" class=\"header-mark\" aria-label=\"Header mark for 'Conclusion'\"\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eProtected Inner Source could revolutionize collaborative development for trusted organizations. It combines the openness of Open Source with the control of Inner Source. This model could be particularly beneficial for government organizations in the public sector. It allows them to share resources efficiently and securely.\u003c/p\u003e\n\u003cp\u003eEspecially in a world where ecosystems are becoming more prominent, this might be beneficial. Imagine not having to spend countless hours working on licensing agreements and NDAs for such partnerships. Build upon trusted relationships in source code sharing strategies. Just like we started doing with federated identities in Identity and Access Management years ago!\u003c/p\u003e\n",
"language": "en"
},
{
"title" : "Firewall Port Status Test Script",
"date_published" : "2017-08-19T11:56:45+02:00",
"date_modified" : "2017-08-19T11:56:45+02:00",
"id" : "https://bearman.nl/2017/08/19/firewall-port-status-test-script/",
"url" : "https://bearman.nl/2017/08/19/firewall-port-status-test-script/",
"summary": "Firewall port testing\rIntroRecently I had some issues at a customer project where, due to the complexity of the environment, sometimes firewall ports were closed after they had initially been added to the rules list. This caused unexpected errors for SharePoint, of which we were unaware at the time that these were due to firewall issues.\nWhile analyzing the issue I came across the Test-NetConnection PowerShell command, which I used to manually verify the issue on one server.",
"content_html" : "\u003ch1 id=\"firewall-port-testing\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#firewall-port-testing\" class=\"header-mark\" aria-label=\"Header mark for 'Firewall port testing'\"\u003e\u003c/a\u003eFirewall port testing\u003c/h1\u003e\u003ch2 id=\"intro\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#intro\" class=\"header-mark\" aria-label=\"Header mark for 'Intro'\"\u003e\u003c/a\u003eIntro\u003c/h2\u003e\u003cp\u003eRecently I had some issues at a customer project where, due to the complexity of the environment, sometimes firewall ports were closed after they had initially been added to the rules list. This caused unexpected errors for SharePoint, of which we were unaware at the time that these were due to firewall issues.\u003c/p\u003e\n\u003cp\u003eWhile analyzing the issue I came across the Test-NetConnection PowerShell command, which I used to manually verify the issue on one server. However when the time came to repeat the command on several servers I started automating things with my own script. Soon enough the project manager asked me if I could output the results of my script to Excel and send him the files by mail.\u003c/p\u003e\n\u003cp\u003eLogging into several servers to collate the results and manually mail them seemed like a task that could be handled better, so once again I started to redesign and automate the process.\u003c/p\u003e\n\u003ch2 id=\"result\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#result\" class=\"header-mark\" aria-label=\"Header mark for 'Result'\"\u003e\u003c/a\u003eResult\u003c/h2\u003e\u003cp\u003eWhat resulted is a script with which you can map out local servers and their outbound server connections by port numbers. You can then run the script (scheduled if you want) on each server locally and it will output to a .htm file. I\u0026rsquo;ve configured it to output it to an IIS hosted file, so the IT operations guys can check the firewall status remotely whenever they want.\u003c/p\u003e\n\u003cp\u003eObviously scheduling a check to ensure firewall ports are still open is not ideal, but should you need it I hope my work will save you some effort!\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bearmannl/posh/blob/master/Scripts/Test-NetConnections.ps1\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTest-NetConnections.ps1\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bearmannl/posh/blob/master/Scripts/Test-NetConnections.json\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTest-NetConnections.json\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
"language": "en"
},
{
"title" : "Sharepoint ULS Log Files Empty",
"date_published" : "2017-04-18T13:58:57+02:00",
"date_modified" : "2017-04-18T13:58:57+02:00",
"id" : "https://bearman.nl/2017/04/18/sharepoint-uls-log-files-empty/",
"url" : "https://bearman.nl/2017/04/18/sharepoint-uls-log-files-empty/",
"summary": "SharePoint ULS\rEmpty log filesRan into an annoying issue today where a SharePoint server was not writing trace log messages, the result was a log directory with 0 bytes logging files.\nIncidentally I found a Event Log error with the code:\n\u0026ldquo;A Session \u0026ldquo;WSSUSAGESESSION15\u0026rdquo; failed to start with the following error: 0xC0000022\u0026rdquo;\nOther posts mention adding the service account (or the WSS_WPG group) for the \u0026lsquo;SharePoint Tracing Service\u0026rsquo; Windows Service to the administrators group, tested that, this indeed fixes the problem.",
"content_html" : "\u003ch1 id=\"sharepoint-uls\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#sharepoint-uls\" class=\"header-mark\" aria-label=\"Header mark for 'SharePoint ULS'\"\u003e\u003c/a\u003eSharePoint ULS\u003c/h1\u003e\u003ch2 id=\"empty-log-files\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#empty-log-files\" class=\"header-mark\" aria-label=\"Header mark for 'Empty log files'\"\u003e\u003c/a\u003eEmpty log files\u003c/h2\u003e\u003cp\u003eRan into an annoying issue today where a SharePoint server was not writing trace log messages, the result was a log directory with 0 bytes logging files.\u003c/p\u003e\n\u003cp\u003eIncidentally I found a Event Log error with the code:\u003cbr\u003e\n\u0026ldquo;A Session \u0026ldquo;WSSUSAGESESSION15\u0026rdquo; failed to start with the following error: 0xC0000022\u0026rdquo;\u003c/p\u003e\n\u003cp\u003eOther posts mention adding the service account (or the WSS_WPG group) for the \u0026lsquo;SharePoint Tracing Service\u0026rsquo; Windows Service to the administrators group, tested that, this indeed fixes the problem. However this does not conform to the principle of least privileged accounts.\u003c/p\u003e\n\u003ch2 id=\"solution\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#solution\" class=\"header-mark\" aria-label=\"Header mark for 'Solution'\"\u003e\u003c/a\u003eSolution\u003c/h2\u003e\u003cp\u003eFinally I found that the \u0026lsquo;Performance Log Users\u0026rsquo; security group provides the correct permissions to allow a service to write trace log information.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the service account using commandline \u0026ldquo;net localgroup \u0026ldquo;Performance Log Users\u0026rdquo; \u0026ldquo;domain\\username\u0026rdquo; /add\u0026rdquo;\u003c/li\u003e\n\u003cli\u003eRestarted the \u0026lsquo;SharePoint Tracing Service\u0026rsquo; Windows Service, problem solved with least amount of privileges!\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePS. Adding the WSS_WPG security group to the performance log users group \u003cem\u003edoes not\u003c/em\u003e solve the issue.\u003c/p\u003e\n",
"language": "en"
},
{
"title" : "Creators Update 2 Microsoft Edge Google Inet_e_resource_not_found",
"date_published" : "2017-04-13T12:12:02+02:00",
"date_modified" : "2017-04-13T12:12:02+02:00",
"id" : "https://bearman.nl/2017/04/13/creators-update-2-microsoft-edge-google-inet_e_resource_not_found/",
"url" : "https://bearman.nl/2017/04/13/creators-update-2-microsoft-edge-google-inet_e_resource_not_found/",
"summary": "Creators update\rThe issueSince the Creators Update navigating to any Google site (google.com, google.co.uk, google.nl, etc.) results in an INET_E_RESOURCE_NOT_FOUND error, only on my work laptop, none of my other devices which I\u0026rsquo;ve also upgraded.\nThis only happened with Google, no other site had this issue\u0026hellip; furthermore I could reach Google(.com) fine via Ping from commandline, Internet Explorer, FireFox and Chrome\u0026hellip;\nCleared my (Edge) browser cache, history, etc. no results.",
"content_html" : "\u003ch1 id=\"creators-update\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#creators-update\" class=\"header-mark\" aria-label=\"Header mark for 'Creators update'\"\u003e\u003c/a\u003eCreators update\u003c/h1\u003e\u003ch2 id=\"the-issue\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#the-issue\" class=\"header-mark\" aria-label=\"Header mark for 'The issue'\"\u003e\u003c/a\u003eThe issue\u003c/h2\u003e\u003cp\u003eSince the Creators Update navigating to any Google site (google.com, google.co.uk, google.nl, etc.) results in an INET_E_RESOURCE_NOT_FOUND error, only on my work laptop, none of my other devices which I\u0026rsquo;ve also upgraded.\u003c/p\u003e\n\u003cp\u003eThis \u003cem\u003eonly\u003c/em\u003e happened with Google, no other site had this issue\u0026hellip; furthermore I could reach Google(.com) fine via Ping from commandline, Internet Explorer, FireFox and Chrome\u0026hellip;\u003c/p\u003e\n\u003cp\u003eCleared my (Edge) browser cache, history, etc. no results. Everything was working fine until the Creators Update.\u003c/p\u003e\n\u003cp\u003eI reported the issue via the Feedback Hub, \u003cdel\u003ebut obviously that\u0026rsquo;s no guarantee\u003c/del\u003e that I would have my Edge browser working with Google as my default search engine\u0026hellip; and I so much like Edge with Google as the default search engine!\u003c/p\u003e\n\u003ch2 id=\"event-log\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#event-log\" class=\"header-mark\" aria-label=\"Header mark for 'Event Log'\"\u003e\u003c/a\u003eEvent Log\u003c/h2\u003e\u003cp\u003eSo I started to pick through my Event Log one error at a time, fixing minor issues every step of the way. Including the following DCOM error, specifically for the RuntimeBroker service:\u003cbr\u003e\n\u0026ldquo;\u003cem\u003eThe application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID {D63B10C5-BB46-4990-A94F-E40B9D520160} and APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276} to the user NT AUTHORITY\\LOCAL SERVICE SID (S-1-5-19) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.\u003c/em\u003e\u0026rdquo;\u003cbr\u003e\n\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/images/2017/04/DCOM-300x197.png\" sizes=\"auto\" alt=\"DCOM\" \u003e\u003c/p\u003e\n\u003cp\u003eAs a SharePoint consultant I come across this type of DCOM error quite regularly:\u003cbr\u003e\n\u003ca href=\"https://support.microsoft.com/en-us/help/920783/event-id-error-messages-10016-and-10017-are-logged-in-the-system-log-after-you-install-windows-sharepoint-services-3.0\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://support.microsoft.com/en-us/help/920783/event-id-error-messages-10016-and-10017-are-logged-in-the-system-log-after-you-install-windows-sharepoint-services-3.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"the-fix\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#the-fix\" class=\"header-mark\" aria-label=\"Header mark for 'The fix'\"\u003e\u003c/a\u003eThe fix\u003c/h2\u003e\u003cp\u003eIn order to fix the error, first take ownership (right click, permissions, advanced, take ownership) of the following registry keys via RegEdit:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHKEY_CLASSES_ROOT\\AppID\\{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}\u003c/li\u003e\n\u003cli\u003eHKEY_CLASSES_ROOT\\CLSID\\{D63B10C5-BB46-4990-A94F-E40B9D520160}\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThen ensure you provide the SYSTEM account with local launch \u0026amp; local activation permissions, refer to the Microsoft Support link above if you need specific steps to do so. When prompted that editing these permissions requires you to remove an unrecognized account from the permissions list, click remove. Since the application wasn\u0026rsquo;t functioning properly anyway I figured\u0026hellip; what the hell\u0026hellip; and it\u0026rsquo;s working fine right now.\u003cbr\u003e\n\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/images/2017/04/DCOM_2-300x205.png\" sizes=\"auto\" alt=\"DCOM 2\" \u003e\u003c/p\u003e\n\u003cp\u003eAfter \u003cdel\u003efixing this\u003c/del\u003e I also noticed the login screen no longer waits 5 seconds before accepting my PIN, \u003cdel\u003etwo for the price of one\u003c/del\u003e!\u003c/p\u003e\n\u003ch2 id=\"update-1\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#update-1\" class=\"header-mark\" aria-label=\"Header mark for 'Update #1'\"\u003e\u003c/a\u003eUpdate #1\u003c/h2\u003e\u003cp\u003e\u003cstrong\u003eUPDATE 19-04-2017:\u003c/strong\u003e\nApparently I was too quick in releasing my post, above did not fix the Google issue. (it \u003cem\u003edid\u003c/em\u003e however fix the slowdown in accepting my PIN)\u003c/p\u003e\n\u003cp\u003eAs provided by Microsoft the issue can be worked around in two ways until they release a fix:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eType about:flags in the address bar. Scroll down to the Networking section (near the bottom) and uncheck Enable TCP Fast Open, \u003cem\u003ethen restart the browser\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eUse InPrivate Browsing when using Edge.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat the feature does:\u003cbr\u003e\n\u003ca href=\"https://www.windowscentral.com/enable-tcp-fast-open-microsoft-edge-faster-page-load-times\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://www.windowscentral.com/enable-tcp-fast-open-microsoft-edge-faster-page-load-times\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eI did disable this feature, I just didn\u0026rsquo;t restart my browser afterwards\u0026hellip; this led me to believe the above fix actually resolved my issue. \u003cstrong\u003eKudo\u0026rsquo;s to Microsoft\u003c/strong\u003e for providing a workaround via the Feedback Hub!\u003c/p\u003e\n",
"language": "en"
},
{
"title" : "Creators Update 1 Remoteapp and Desktop Connection Gateway Unavailable",
"date_published" : "2017-04-10T13:11:47+02:00",
"date_modified" : "2017-04-10T13:11:47+02:00",
"id" : "https://bearman.nl/2017/04/10/creators-update-1-remoteapp-and-desktop-connection-gateway-unavailable/",
"url" : "https://bearman.nl/2017/04/10/creators-update-1-remoteapp-and-desktop-connection-gateway-unavailable/",
"summary": "Creators Update\rThe IssueLast week I upgraded all my personal Windows 10 devices to build 1703 (Creators Update) and after a few days of testing I was convinced this build is solid enough to upgrade my work laptop as well\u0026hellip; true so far except for one minor issue! When I had to connect to a client\u0026rsquo;s RemoteApp and Desktop Connection gateway, which they host on Windows Server 2008R2, I got the following error: \u0026ldquo;Your computer can’t connect to the Remote Desktop Gateway server.",
"content_html" : "\u003ch1 id=\"creators-update\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#creators-update\" class=\"header-mark\" aria-label=\"Header mark for 'Creators Update'\"\u003e\u003c/a\u003eCreators Update\u003c/h1\u003e\u003ch2 id=\"the-issue\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#the-issue\" class=\"header-mark\" aria-label=\"Header mark for 'The Issue'\"\u003e\u003c/a\u003eThe Issue\u003c/h2\u003e\u003cp\u003eLast week I upgraded all my personal Windows 10 devices to build 1703 (Creators Update) and after a few days of testing I was convinced this build is solid enough to upgrade my work laptop as well\u0026hellip; true so far except for one minor issue! When I had to connect to a client\u0026rsquo;s RemoteApp and Desktop Connection gateway, which they host on Windows Server 2008R2, I got the following error: \u0026ldquo;\u003cem\u003eYour computer can’t connect to the Remote Desktop Gateway server. Contact your network administrator for assistance.\u003c/em\u003e\u0026rdquo; I don\u0026rsquo;t know exactly what changed in this Windows build with regards to the RDP client, however I worked around it by restoring the following two files to the Windows System32 folder, from the Windows.old folder:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emstsc.exe\u003c/li\u003e\n\u003cli\u003emstsccax.dll\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/images/2017/04/MSTSC_replace-300x300.png\" sizes=\"auto\" alt=\"MTSC replace\" \u003e\u003c/p\u003e\n\u003ch2 id=\"to-be-continued\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#to-be-continued\" class=\"header-mark\" aria-label=\"Header mark for 'To be continued\u0026amp;hellip;'\"\u003e\u003c/a\u003eTo be continued\u0026hellip;\u003c/h2\u003e\u003cp\u003eAs you can see from the file replace details, the files have changed somewhat with this new build. I don\u0026rsquo;t yet know if this also occurs with RDS hosted on 2012 and up, if it does please leave a comment below. Obviously not a permanent solution, but unfortunately I don\u0026rsquo;t have the luxury of waiting for one.\u003c/p\u003e\n",
"language": "en"
},
{
"title" : "Password Change Notification Script",
"date_published" : "2016-06-23T14:09:50+02:00",
"date_modified" : "2016-06-23T14:09:50+02:00",
"id" : "https://bearman.nl/2016/06/23/password-change-notification-script/",
"url" : "https://bearman.nl/2016/06/23/password-change-notification-script/",
"summary": "Password change notification\rVersion 1.4Recently I found myself in need of a password change notification script. What do all efficient/lazy administrators do when they need a script for any purpose? Right, I searched one online, downloaded it, checked it, suppressed any desire to fiddle with it and then scheduled it to run. For those interested, I used the script provided by Robert Pearman over at the Technet Gallery. For Office365 compatibility check his post here…",
"content_html" : "\u003ch1 id=\"password-change-notification\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#password-change-notification\" class=\"header-mark\" aria-label=\"Header mark for 'Password change notification'\"\u003e\u003c/a\u003ePassword change notification\u003c/h1\u003e\u003ch2 id=\"version-14\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#version-14\" class=\"header-mark\" aria-label=\"Header mark for 'Version 1.4'\"\u003e\u003c/a\u003eVersion 1.4\u003c/h2\u003e\u003cp\u003eRecently I found myself in need of a password change notification script. What do all efficient/lazy administrators do when they need a script for any purpose? Right, I searched one online, downloaded it, \u003cem\u003echecked it\u003c/em\u003e, suppressed any desire to fiddle with it and then scheduled it to run. For those interested, I used the script provided by Robert Pearman \u003ca href=\"https://gallery.technet.microsoft.com/Password-Expiry-Email-177c3e27\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eover at the Technet Gallery\u003c/a\u003e. For Office365 compatibility check \u003ca href=\"https://windowsserveressentials.com/2015/01/23/office-365-email-password-reminder/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehis post here\u003c/a\u003e…\u003c/p\u003e\n\u003ch2 id=\"version-20\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#version-20\" class=\"header-mark\" aria-label=\"Header mark for 'Version 2.0'\"\u003e\u003c/a\u003eVersion 2.0\u003c/h2\u003e\u003cp\u003eBut then… that annoying little OCD gene (those of you who have it surely recognize it!) crept up on me today and I started fiddling with it anyway. I told myself the script needed to include some customizations for my company, but who am I kidding, I would lose sleep if I didn’t give in to my OCD quirks every once in a while. In general, I changed the script to include a proper description block, parameters, cleanup of casing for variables and refactoring of some Boolean uses to shorten the if statements. The part I needed to change specifically for Silverside was the Filter for the Get-ADUser command, this allows me to filter out Admin accounts in our organization:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers tw-group tw-my-2\"\u003e\r\n \u003cdiv class=\"\r\n code-block-title \r\n \r\n tw-flex \r\n tw-flex-row \r\n tw-justify-between \r\n tw-w-full tw-bg-bgColor-secondary\r\n \"\u003e \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block\r\n group-[.is-open]:tw-rotate-90\r\n tw-transition-[transform] \r\n tw-duration-500 \r\n tw-ease-in-out\r\n print:!tw-hidden\"\r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\r\n \u003cp class=\"tw-select-none !tw-my-1\"\u003epowershell\u003c/p\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"tw-flex\"\u003e\r\n \u003cbutton \r\n class=\"\r\n line-number-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.show-line-numbers]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cbutton \r\n class=\"\r\n wrap-code-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.is-wrap]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n copy-code-button\r\n tw-select-none\r\n tw-mx-2 \r\n tw-hidden\r\n group-[.is-open]:tw-block\r\n hover:tw-text-fgColor-link \r\n print:!tw-hidden\"\r\n title=\"Copy code\"\u003e\r\n \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block \r\n group-[.is-open]:tw-hidden \r\n print:!tw-hidden\" \r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \r\n id=\"codeblock-id-1\" \r\n class=\"\r\n chroma \r\n !tw-block \r\n tw-p-0\r\n tw-m-0\r\n tw-transition-[max-height] \r\n tw-duration-500 \r\n tw-ease-in-out \r\n group-[.is-closed]:!tw-max-h-0 \r\n group-[.is-wrap]:tw-text-wrap\r\n tw-overflow-y-hidden\r\n tw-overflow-x-auto\r\n tw-scrollbar-thin\r\n \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e…\u003c/span\u003e \u003cspan class=\"o\"\u003e-and\u003c/span\u003e \u003cspan class=\"nv\"\u003e$_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eUserPrincipalName\u003c/span\u003e \u003cspan class=\"o\"\u003e-notlike\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;adm*\u0026#39;\u003c/span\u003e \u003cspan class=\"err\"\u003e…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eOverall the script is now easier to deploy out of the box with the use of parameters (including defaults), so long as you remember to adjust \u003cem\u003e\u003cstrong\u003eat least\u003c/strong\u003e\u003c/em\u003e the \u003cstrong\u003e$smtpServer\u003c/strong\u003e and \u003cstrong\u003e$from\u003c/strong\u003e variables under the config section:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers tw-group tw-my-2\"\u003e\r\n \u003cdiv class=\"\r\n code-block-title \r\n \r\n tw-flex \r\n tw-flex-row \r\n tw-justify-between \r\n tw-w-full tw-bg-bgColor-secondary\r\n \"\u003e \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block\r\n group-[.is-open]:tw-rotate-90\r\n tw-transition-[transform] \r\n tw-duration-500 \r\n tw-ease-in-out\r\n print:!tw-hidden\"\r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\r\n \u003cp class=\"tw-select-none !tw-my-1\"\u003epowershell\u003c/p\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"tw-flex\"\u003e\r\n \u003cbutton \r\n class=\"\r\n line-number-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.show-line-numbers]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cbutton \r\n class=\"\r\n wrap-code-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.is-wrap]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n copy-code-button\r\n tw-select-none\r\n tw-mx-2 \r\n tw-hidden\r\n group-[.is-open]:tw-block\r\n hover:tw-text-fgColor-link \r\n print:!tw-hidden\"\r\n title=\"Copy code\"\u003e\r\n \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block \r\n group-[.is-open]:tw-hidden \r\n print:!tw-hidden\" \r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \r\n id=\"codeblock-id-2\" \r\n class=\"\r\n chroma \r\n !tw-block \r\n tw-p-0\r\n tw-m-0\r\n tw-transition-[max-height] \r\n tw-duration-500 \r\n tw-ease-in-out \r\n group-[.is-closed]:!tw-max-h-0 \r\n group-[.is-wrap]:tw-text-wrap\r\n tw-overflow-y-hidden\r\n tw-overflow-x-auto\r\n tw-scrollbar-thin\r\n \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$smtpServer\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;mail.yourdomain.local\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$from\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Your Company IT [email protected]\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003ch2 id=\"the-final-script\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#the-final-script\" class=\"header-mark\" aria-label=\"Header mark for 'The final script'\"\u003e\u003c/a\u003eThe final script\u003c/h2\u003e\u003cp\u003eAs you no doubt found this post after efficiently searching for a free scipt online, feel free to use, I hope it saves you some time. Just remember to include the original author as described in the comments. You can also find the latest version at my GitHub account, \u003ca href=\"https://github.com/bearmannl/posh/blob/master/Scripts/Send-PasswordChangeNotification.ps1\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSend-PasswordChangeNotification.ps1\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers tw-group tw-my-2\"\u003e\r\n \u003cdiv class=\"\r\n code-block-title \r\n \r\n tw-flex \r\n tw-flex-row \r\n tw-justify-between \r\n tw-w-full tw-bg-bgColor-secondary\r\n \"\u003e \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block\r\n group-[.is-open]:tw-rotate-90\r\n tw-transition-[transform] \r\n tw-duration-500 \r\n tw-ease-in-out\r\n print:!tw-hidden\"\r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\r\n \u003cp class=\"tw-select-none !tw-my-1\"\u003epowershell\u003c/p\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"tw-flex\"\u003e\r\n \u003cbutton \r\n class=\"\r\n line-number-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.show-line-numbers]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cbutton \r\n class=\"\r\n wrap-code-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.is-wrap]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n copy-code-button\r\n tw-select-none\r\n tw-mx-2 \r\n tw-hidden\r\n group-[.is-open]:tw-block\r\n hover:tw-text-fgColor-link \r\n print:!tw-hidden\"\r\n title=\"Copy code\"\u003e\r\n \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block \r\n group-[.is-open]:tw-hidden \r\n print:!tw-hidden\" \r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \r\n id=\"codeblock-id-3\" \r\n class=\"\r\n chroma \r\n !tw-block \r\n tw-p-0\r\n tw-m-0\r\n tw-transition-[max-height] \r\n tw-duration-500 \r\n tw-ease-in-out \r\n group-[.is-closed]:!tw-max-h-0 \r\n group-[.is-wrap]:tw-text-wrap\r\n tw-overflow-y-hidden\r\n tw-overflow-x-auto\r\n tw-scrollbar-thin\r\n \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\u0026lt;#\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.\u003c/span\u003e\u003cspan class=\"sd\"\u003eSYNOPSIS\u003c/span\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Get all users with a soon to expire password and send them a reminder to do so.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.\u003c/span\u003e\u003cspan class=\"sd\"\u003eDESCRIPTION\u003c/span\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e This script gets all users with a soon to expire password and sends them a reminder to do so. This script was originally created by Robert Pearman and posted on the technet gallery. Since modified by Mike Beerman to include changes specific for Silverside. Settings such as the destination SMTP server and From address can only be configured within the script.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.PARAMETER ExpireInDays\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Optional input allowing an override to the number of days at which the script will send a reminder. Defaults to 30 days.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.PARAMETER Logging\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Switch which determines if a seperate CSV logfile should be created. Default to false without the switch.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.PARAMETER LogPath\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Folderpath for the logfile, plain string format.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.PARAMETER Testing\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Switch which determines if the emails should be sent to the test recipient instead of the actual users. Default to false without the switch.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.PARAMETER TestRecipient\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Optional string for setting a different recipient in testing for testing purposes. Will not be used if Testing is not included in the command or email is disabled.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.PARAMETER TestMailDisabled\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Switch for disabling email functionality.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.\u003c/span\u003e\u003cspan class=\"sd\"\u003eEXAMPLE\u003c/span\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003eSend-PasswordChangeNotification.ps1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003eSend-PasswordChangeNotification.ps1 -Expire 60 -Logging -Logile \u0026#34;C:\\Logs\\PasswordChangeNotifications.csv\u0026#34; -Testing -TestRecipient \u0026#34;[email protected]\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.\u003c/span\u003e\u003cspan class=\"sd\"\u003eLINK\u003c/span\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e https://gallery.technet.microsoft.com/Password-Expiry-Email-177c3e27\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e https://bearman.nl/2016/06/23/password-change-notification-script\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e.\u003c/span\u003e\u003cspan class=\"sd\"\u003eNOTES\u003c/span\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Authors : Mike Beerman\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Company : Silverside\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Date : 2016-06-23\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Version : 2.0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Authors : Robert Pearman (WSSMB MVP)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Company : Windows Server Essentials\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Date : 2016-02-03\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e Version : 1.4\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cm\"\u003e#\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eparam\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nb\"\u003eValidateRange\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mf\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mf\"\u003e365\u003c/span\u003e\u003cspan class=\"p\"\u003e)][\u003c/span\u003e\u003cspan class=\"no\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ExpireInDays\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"mf\"\u003e30\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"no\"\u003eswitch\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"nv\"\u003e$Logging\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"no\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"nv\"\u003e$LogPath\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;C:\\Logs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"no\"\u003eswitch\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"nv\"\u003e$Testing\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"no\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TestRecipient\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[email protected]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"no\"\u003eswitch\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TestMailDisabled\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e##\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Config values\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e##\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$smtpServer\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;mail.yourdomain.local\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$from\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Your Company IT \u0026lt;[email protected]\u0026gt;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$textEncoding\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"no\"\u003eSystem.Text.Encoding\u003c/span\u003e\u003cspan class=\"p\"\u003e]::\u003c/span\u003e\u003cspan class=\"n\"\u003eUTF8\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$logDate\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Format\u003c/span\u003e \u003cspan class=\"n\"\u003eyyyyMMdd\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$LogPath\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$LogPath\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003eTrimEnd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\\\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$logFile\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$LogPath\u003c/span\u003e \u003cspan class=\"p\"\u003e+\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\\PasswordChangeNotifications.csv\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e##\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e#Initiate PowerShell session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e##\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Set threading\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$ver\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003eSelect-Object\u003c/span\u003e \u003cspan class=\"n\"\u003eVersion\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ver\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eMajor\u003c/span\u003e \u003cspan class=\"o\"\u003e-gt\u003c/span\u003e \u003cspan class=\"mf\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nv\"\u003e$Host\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eRunspace\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eThreadOptions\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ReuseThread\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Load Active Directory PowerShell snap-in\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eImport-Module\u003c/span\u003e \u003cspan class=\"n\"\u003eActiveDirectory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eWrite-Verbose\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[{0}] - AD PowerShell SnapIn loaded\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-f\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Format\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$verbosePreference\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Continue\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Check Logging Settings\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$Logging\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Test Log Folder Path and create new directory if false\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e$null\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eTest-Path\u003c/span\u003e \u003cspan class=\"nv\"\u003e$LogPath\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Create CSV File and Headers\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eNew-Item\u003c/span\u003e \u003cspan class=\"nv\"\u003e$LogPath\u003c/span\u003e \u003cspan class=\"n\"\u003e-ItemType\u003c/span\u003e \u003cspan class=\"n\"\u003eDirectory\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003eOut-Null\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eWrite-Verbose\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[{0}] - New folder created at [{1}]\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-f\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Format\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"nv\"\u003e$LogPath\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Test Log File Path and create new file if false\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e$null\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eTest-Path\u003c/span\u003e \u003cspan class=\"nv\"\u003e$logFile\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Create CSV File and Headers\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eNew-Item\u003c/span\u003e \u003cspan class=\"nv\"\u003e$logFile\u003c/span\u003e \u003cspan class=\"n\"\u003e-ItemType\u003c/span\u003e \u003cspan class=\"n\"\u003eFile\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003eOut-Null\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eAdd-Content\u003c/span\u003e \u003cspan class=\"nv\"\u003e$logFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Date,Name,EmailAddress,DaystoExpire,ExpiresOn,Notified\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eWrite-Verbose\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[{0}] - New logfile created at [{1}]\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-f\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Format\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"nv\"\u003e$logFile\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e# End Logging Check\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$DefaultmaxPasswordAge\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-ADDefaultDomainPasswordPolicy\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003eMaxPasswordAge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Get Users From AD who are Enabled, Passwords Expire and are Not Currently Expired\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$users\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-ADUser\u003c/span\u003e \u003cspan class=\"n\"\u003e-Filter\u003c/span\u003e \u003cspan class=\"p\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003e-Properties\u003c/span\u003e \u003cspan class=\"n\"\u003eName\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ePasswordNeverExpires\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ePasswordExpired\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ePasswordLastSet\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eEmailAddress\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003eWhere-Object\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nv\"\u003e$_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eEnabled\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"vm\"\u003e$true\u003c/span\u003e \u003cspan class=\"o\"\u003e-and\u003c/span\u003e \u003cspan class=\"nv\"\u003e$_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003ePasswordNeverExpires\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"vm\"\u003e$false\u003c/span\u003e \u003cspan class=\"o\"\u003e-and\u003c/span\u003e \u003cspan class=\"nv\"\u003e$_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003epasswordexpired\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"vm\"\u003e$false\u003c/span\u003e \u003cspan class=\"o\"\u003e-and\u003c/span\u003e \u003cspan class=\"nv\"\u003e$_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eUserPrincipalName\u003c/span\u003e \u003cspan class=\"o\"\u003e-notlike\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;adm*\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Process Each User for Password Expiry\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$user\u003c/span\u003e \u003cspan class=\"k\"\u003ein\u003c/span\u003e \u003cspan class=\"nv\"\u003e$users\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$name\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eName\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eEmailAddress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$passwordSetDate\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003ePasswordLastSet\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$PasswordPol\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-ADUserResultantPasswordPolicy\u003c/span\u003e \u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$sent\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"c\"\u003e# Reset Sent Flag\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Check for Fine Grained Password\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e$null\u003c/span\u003e \u003cspan class=\"o\"\u003e-ne\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PasswordPol\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$maxPasswordAge\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PasswordPol\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003eMaxPasswordAge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# No FGP set to Domain Default\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$maxPasswordAge\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$DefaultmaxPasswordAge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$expiresOn\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$passwordSetDate\u003c/span\u003e \u003cspan class=\"p\"\u003e+\u003c/span\u003e \u003cspan class=\"nv\"\u003e$maxPasswordAge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$today\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eNew-TimeSpan\u003c/span\u003e \u003cspan class=\"n\"\u003e-Start\u003c/span\u003e \u003cspan class=\"nv\"\u003e$today\u003c/span\u003e \u003cspan class=\"n\"\u003e-End\u003c/span\u003e \u003cspan class=\"nv\"\u003e$expiresOn\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003eDays\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Set Greeting based on Number of Days to Expiry.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Check Number of Days to Expiry\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$messageDays\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"nv\"\u003e$messageDays\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-gt\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$messageDays\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;in \u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e+\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e+\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; days.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$messageDays\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;today.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Email Subject Set Here\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$subject\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Your password will expire \u003c/span\u003e\u003cspan class=\"nv\"\u003e$messageDays\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Email Body Set Here, Note You can use HTML, including Images.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$body\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e Dear \u003c/span\u003e\u003cspan class=\"nv\"\u003e$name\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e \u0026lt;p\u0026gt; Your Password will expire \u003c/span\u003e\u003cspan class=\"nv\"\u003e$messageDays\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026lt;br\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e To change your password on a PC press CTRL ALT Delete and choose Change Password \u0026lt;br\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e \u0026lt;p\u0026gt;Thanks, \u0026lt;br\u0026gt; \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e Your Comany IT Administrators\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e \u0026lt;/p\u0026gt;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# If Testing Is Enabled - Email Administrator\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$Testing\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TestRecipient\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e# End Testing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# If a user has no email address listed\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e$null\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TestRecipient\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"c\"\u003e# End No Valid Email\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Send Email Message\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;0\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-or\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;14\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-or\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ExpireInDays\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$sent\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Yes\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# If Logging is Enabled Log Details\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$Logging\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eAdd-Content\u003c/span\u003e \u003cspan class=\"nv\"\u003e$logFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$logDate\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$name\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$expiresOn\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$sent\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eWrite-Verbose\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[{0}] - Entry added to logfile for user [{1}]\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-f\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Format\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eUserPrincipalName\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Send Email Message if not disabled by switch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"vm\"\u003e$null\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TestMailDisabled\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eSend-Mailmessage\u003c/span\u003e \u003cspan class=\"n\"\u003e-SmtpServer\u003c/span\u003e \u003cspan class=\"nv\"\u003e$smtpServer\u003c/span\u003e \u003cspan class=\"n\"\u003e-From\u003c/span\u003e \u003cspan class=\"nv\"\u003e$from\u003c/span\u003e \u003cspan class=\"n\"\u003e-To\u003c/span\u003e \u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e \u003cspan class=\"n\"\u003e-Subject\u003c/span\u003e \u003cspan class=\"nv\"\u003e$subject\u003c/span\u003e \u003cspan class=\"n\"\u003e-Body\u003c/span\u003e \u003cspan class=\"nv\"\u003e$body\u003c/span\u003e \u003cspan class=\"n\"\u003e-BodyAsHTML\u003c/span\u003e \u003cspan class=\"n\"\u003e-Priority\u003c/span\u003e \u003cspan class=\"n\"\u003eHigh\u003c/span\u003e \u003cspan class=\"n\"\u003e-Encoding\u003c/span\u003e \u003cspan class=\"nv\"\u003e$textEncoding\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eWrite-Verbose\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[{0}] - Email sent to [{1}]\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-f\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Format\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e# End Send Message\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# Log Non Expiring Password\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003e$sent\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;No\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c\"\u003e# If Logging is Enabled Log Details\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$Logging\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eAdd-Content\u003c/span\u003e \u003cspan class=\"nv\"\u003e$logFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$logDate\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$name\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$emailAddress\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$daysToExpire\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$expiresOn\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$sent\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eWrite-Verbose\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[{0}] - Entry added to logfile for user [{1}]\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-f\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Format\u003c/span\u003e \u003cspan class=\"n\"\u003eT\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eUserPrincipalName\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"c\"\u003e# End User Processing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$verbosePreference\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;SilentlyContinue\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# End\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n",
"language": "en"
},
{
"title" : "Custom Domain Names With Azurewebsites",
"date_published" : "2016-06-16T15:13:27+02:00",
"date_modified" : "2016-06-16T15:13:27+02:00",
"id" : "https://bearman.nl/2016/06/16/custom-domain-names-with-azurewebsites/",
"url" : "https://bearman.nl/2016/06/16/custom-domain-names-with-azurewebsites/",
"summary": "Custom Domain names\rAzure WebsitesI\u0026rsquo;ve only recently set up this blog and since it\u0026rsquo;s always busy at work, I don\u0026rsquo;t always have the time to sort out those \u0026rsquo;nice to haves\u0026rsquo;. I\u0026rsquo;m hosting this blog using AzureWebsites, but obviously I use my own domain name. My pain? For the life of me I couldn\u0026rsquo;t figure out the magic rule to rewrite my x.azurewebsites.net url to the proper \u0026lsquo;bearman.nl\u0026rsquo; hostname I\u0026rsquo;m using now.",
"content_html" : "\u003ch1 id=\"custom-domain-names\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#custom-domain-names\" class=\"header-mark\" aria-label=\"Header mark for 'Custom Domain names'\"\u003e\u003c/a\u003eCustom Domain names\u003c/h1\u003e\u003ch2 id=\"azure-websites\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#azure-websites\" class=\"header-mark\" aria-label=\"Header mark for 'Azure Websites'\"\u003e\u003c/a\u003eAzure Websites\u003c/h2\u003e\u003cp\u003eI\u0026rsquo;ve only recently set up this blog and since it\u0026rsquo;s always busy at work, I don\u0026rsquo;t always have the time to sort out those \u0026rsquo;nice to haves\u0026rsquo;. I\u0026rsquo;m hosting this blog using AzureWebsites, but obviously I use my own domain name. My pain? For the life of me I couldn\u0026rsquo;t figure out the magic rule to rewrite my x.azurewebsites.net url to the proper \u0026lsquo;bearman.nl\u0026rsquo; hostname I\u0026rsquo;m using now. Shame on me, Microsoft consultant couldn\u0026rsquo;t figure out a simple IIS redirect rule\u0026hellip; In my defense, I hadn\u0026rsquo;t really taken the time to do it properly and I had in fact solved it, but in the wrong order. To setup an AzureWebsite using a custom domain you need to configure it in several places:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIn the Azure portal;\u003c/li\u003e\n\u003cli\u003eDNS records with your domain registrar;\u003c/li\u003e\n\u003cli\u003eIn your application, in my case WordPress;\u003c/li\u003e\n\u003cli\u003eAn IIS rule to do the actual rewrite/redirect.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setting-the-configuration\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#setting-the-configuration\" class=\"header-mark\" aria-label=\"Header mark for 'Setting the configuration'\"\u003e\u003c/a\u003eSetting the configuration\u003c/h2\u003e\u003cp\u003eWhere to configure in Azure? In the Azure Portal find your Web App settings and under the Routing header click on Custom Domains and SSL. Select Bring External Domain and follow the instructions. Pay attention to using the correct type of DNS records, A records and CNAME records, depending on the correct entry. With your domain registrar find the DNS Manager to actually enter the records. You need to set the awverify.*.azurewebsites.net record with a CNAME to verify your custom domain with Azure. I went and created an A record for my domain to the AzureWebsite. Most registrars provide a warning stating you need to wait a maximum of up to 24 hours before the records are updated, in my case they were available within a minute, this may vary based on the receiving location however. In your application add your custom domain, in the case of WordPress go to General Settings and edit your WordPress Address (URL) and Site Address (URL) accordingly. Finally comes the last bit of magic, the IIS rewrite rule. Kudo\u0026rsquo;s to the \u003ca href=\"http://onthecloud.azurewebsites.net/seo-tip-how-to-block-the-.azurewebsites.net-domain\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eauthor of the solution\u003c/a\u003e for the final makeup of the IIS rule and \u003ca href=\"http://www.devjev.nl/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDevJev\u003c/a\u003e for nudging me in the right direction :-)\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers tw-group tw-my-2\"\u003e\r\n \u003cdiv class=\"\r\n code-block-title \r\n \r\n tw-flex \r\n tw-flex-row \r\n tw-justify-between \r\n tw-w-full tw-bg-bgColor-secondary\r\n \"\u003e \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block\r\n group-[.is-open]:tw-rotate-90\r\n tw-transition-[transform] \r\n tw-duration-500 \r\n tw-ease-in-out\r\n print:!tw-hidden\"\r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\r\n \u003cp class=\"tw-select-none !tw-my-1\"\u003exml\u003c/p\u003e\r\n \u003c/div\u003e\r\n \u003cdiv class=\"tw-flex\"\u003e\r\n \u003cbutton \r\n class=\"\r\n line-number-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.show-line-numbers]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n\r\n \u003cbutton \r\n class=\"\r\n wrap-code-button\r\n tw-select-none \r\n tw-mx-2 \r\n tw-hidden \r\n group-[.is-open]:tw-block \r\n group-[.is-wrap]:tw-text-fgColor-link \r\n print:!tw-hidden\" \r\n title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n copy-code-button\r\n tw-select-none\r\n tw-mx-2 \r\n tw-hidden\r\n group-[.is-open]:tw-block\r\n hover:tw-text-fgColor-link \r\n print:!tw-hidden\"\r\n title=\"Copy code\"\u003e\r\n \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\r\n \u003c/button\u003e\r\n \r\n \u003cbutton \r\n class=\"\r\n tw-select-none \r\n tw-mx-2 \r\n tw-block \r\n group-[.is-open]:tw-hidden \r\n print:!tw-hidden\" \r\n disabled\r\n aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\r\n \u003c/div\u003e\r\n \u003c/div\u003e\r\n \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \r\n id=\"codeblock-id-1\" \r\n class=\"\r\n chroma \r\n !tw-block \r\n tw-p-0\r\n tw-m-0\r\n tw-transition-[max-height] \r\n tw-duration-500 \r\n tw-ease-in-out \r\n group-[.is-closed]:!tw-max-h-0 \r\n group-[.is-wrap]:tw-text-wrap\r\n tw-overflow-y-hidden\r\n tw-overflow-x-auto\r\n tw-scrollbar-thin\r\n \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u0026lt;?xml version=\u0026#34;1.0\u0026#34; encoding=\u0026#34;UTF-8\u0026#34;?\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;configuration\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;system.webServer\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;rewrite\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;rules\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;rule\u003c/span\u003e \u003cspan class=\"na\"\u003ename=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Disable Azure Domain\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003epatternSyntax=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Wildcard\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003estopProcessing=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;match\u003c/span\u003e \u003cspan class=\"na\"\u003eurl=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;*\u0026#34;\u003c/span\u003e\u003cspan class=\"nt\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;conditions\u003c/span\u003e \u003cspan class=\"na\"\u003elogicalGrouping=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;MatchAll\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003etrackAllCaptures=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;false\u0026#34;\u003c/span\u003e\u003cspan class=\"nt\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;add\u003c/span\u003e \u003cspan class=\"na\"\u003einput=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;{HTTP_HOST}\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003epattern=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;*.azurewebsites.net\u0026#34;\u003c/span\u003e\u003cspan class=\"nt\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;/conditions\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;action\u003c/span\u003e \u003cspan class=\"na\"\u003etype=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Redirect\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003eurl=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;http://www.mysite.com{REQUEST_URI}\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003eredirectType=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Permanent\u0026#34;\u003c/span\u003e\u003cspan class=\"nt\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;/rule\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;/rules\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;/rewrite\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;/system.webServer\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nt\"\u003e\u0026lt;/configuration\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\r\n\u003c/div\u003e\r\n\u003cp\u003eSo why couldn\u0026rsquo;t I figure this last bit of magic out on my own\u0026hellip; I tried to set this up \u003cem\u003ebefore completing the other steps\u003c/em\u003e. Working on this yourself? Sort your Azure, DNS and WordPress config first!\u003c/p\u003e\n",
"language": "en"
},
{
"title" : "SfB HA SQL DAG Configuration",
"date_published" : "2016-05-26T14:45:26+02:00",
"date_modified" : "2016-05-26T14:45:26+02:00",
"id" : "https://bearman.nl/2016/05/26/sfb-ha-sql-dag-configuration/",
"url" : "https://bearman.nl/2016/05/26/sfb-ha-sql-dag-configuration/",
"summary": "Skype for Business: High Availability SQL Database Availability Group Configuration\rOne of those silly mistakes…I’ve recently installed and configured a new Skype for Business landscape at my company. While implementing this I made one of those silly mistakes that cause you to spend hours looking for a solution… which is in fact one simple undocumented configuration setting. For our SfB configuration we use a high availability SQL cluster and we’ve also set up a Database Availability Group, or DAG.",
"content_html" : "\u003ch1 id=\"skype-for-business-high-availability-sql-database-availability-group-configuration\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#skype-for-business-high-availability-sql-database-availability-group-configuration\" class=\"header-mark\" aria-label=\"Header mark for 'Skype for Business: High Availability SQL Database Availability Group Configuration'\"\u003e\u003c/a\u003eSkype for Business: High Availability SQL Database Availability Group Configuration\u003c/h1\u003e\u003ch2 id=\"one-of-those-silly-mistakes\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#one-of-those-silly-mistakes\" class=\"header-mark\" aria-label=\"Header mark for '\u0026lt;strong\u0026gt;One of those silly mistakes…\u0026lt;/strong\u0026gt;'\"\u003e\u003c/a\u003e\u003cstrong\u003eOne of those silly mistakes…\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003eI’ve recently installed and configured a new Skype for Business landscape at my company. While implementing this I made one of those silly mistakes that cause you to spend hours looking for a solution… which is in fact one simple undocumented configuration setting. For our SfB configuration we use a high availability SQL cluster and we’ve also set up a Database Availability Group, or DAG. Once enabled, the first field gets relabeled ‘SQL Server Availability Group Listener FQDN’, the second ‘SQL Server FQDN’. Initially before enabling the DAG I set these values:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eField 1, SQL Server DAG FQDN;\u003c/li\u003e\n\u003cli\u003eField 2, any given SQL Server node FQDN which will become part of the DAG.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhich looks like this:\u003cbr\u003e\n\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/2016/05/26/sfb-ha-sql-dag-configuration/DAG_Before.png\" srcset=\"/2016/05/26/sfb-ha-sql-dag-configuration/DAG_Before_hu17b7e1fb734a78195e779513aac511dd_77169_800x0_resize_q75_h2_box_3.webp 800w, /2016/05/26/sfb-ha-sql-dag-configuration/DAG_Before_hu17b7e1fb734a78195e779513aac511dd_77169_1200x0_resize_q75_h2_box_3.webp 1200w, /2016/05/26/sfb-ha-sql-dag-configuration/DAG_Before_hu17b7e1fb734a78195e779513aac511dd_77169_1600x0_resize_q75_h2_box_3.webp 1600w\" sizes=\"auto\" alt=\"DAG before\" height=\"429\" width=\"562\"\u003e\u003c/p\u003e\n\u003cp\u003eAfter the installation was complete and my published topology was running I ran into all sorts of problems, the root of which was the SQL datasource being read-only. Shortly after I determined the errors went away for a while when I switched the active node in the SQL cluster, so \u003cem\u003esomething\u003c/em\u003e had to be wrong with those settings… \u003cstrong\u003ebut what\u003c/strong\u003e?!\u003c/p\u003e\n\u003ch2 id=\"the-fix\" class=\"headerLink\"\u003e\r\n \u003ca href=\"#the-fix\" class=\"header-mark\" aria-label=\"Header mark for 'The fix'\"\u003e\u003c/a\u003eThe fix\u003c/h2\u003e\u003cp\u003eSo what’s the correct configuration? After the initial installation of SfB \u003cem\u003eand\u003c/em\u003e finalizing the replication of all the databases for the SQL DAG, \u003cstrong\u003eyou need to change the SQL server FQDN back to the DAG FQDN.\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eField 1 requires, SQL Server DAG FQDN;\u003c/li\u003e\n\u003cli\u003eField 2 requires, SQL Server DAG FQDN.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg class=\"tw-inline\" loading=\"lazy\" src=\"/2016/05/26/sfb-ha-sql-dag-configuration/DAG_After.png\" srcset=\"/2016/05/26/sfb-ha-sql-dag-configuration/DAG_After_hu17202ef34e365d6b5c6f34fac0f7e78d_77472_800x0_resize_q75_h2_box_3.webp 800w, /2016/05/26/sfb-ha-sql-dag-configuration/DAG_After_hu17202ef34e365d6b5c6f34fac0f7e78d_77472_1200x0_resize_q75_h2_box_3.webp 1200w, /2016/05/26/sfb-ha-sql-dag-configuration/DAG_After_hu17202ef34e365d6b5c6f34fac0f7e78d_77472_1600x0_resize_q75_h2_box_3.webp 1600w\" sizes=\"auto\" alt=\"DAG after\" height=\"429\" width=\"562\"\u003e\u003c/p\u003e\n\u003cp\u003eWhy are there two fields for the same setting? You need to install the databases onto a single SQL node once before you can switch on the DAG settings, \u003cem\u003e\u003cstrong\u003ethen remember to reconfigure the SQL store in your SfB topology with the DAG FQDN\u003c/strong\u003e\u003c/em\u003e. Would be nice if the Microsoft documentation was explicit on the little things like these. One final tip, whenever you see a field that requires the \u003cstrong\u003eFQDN\u003c/strong\u003e, double check you \u003cem\u003eactually used the FQDN\u003c/em\u003e before publishing your topology. Changing the FQDN on the SQL Server store after the topology has been published can be a chore…\u003c/p\u003e\n",
"language": "en"
},
]
}