Skip to content

Instantly share code, notes, and snippets.


Daniel Schroeder deadlydog

View GitHub Profile
deadlydog / PowerShellSingleFileScriptTemplate.ps1
Last active Nov 21, 2020
Template for a single-file PowerShell script
View PowerShellSingleFileScriptTemplate.ps1
deadlydog /
Last active Aug 30, 2020
Things every application / service should have

Things to include in every application / service

Some things that every application or service you build should have:

  • Logging (preferably centralized)
  • Metrics (to know how the app is performing (slow endpoints, etc.))
  • Alerts (to be notified when things aren't working properly)
  • Telemetry (to know which parts of the app / service are used most, or not at all and can be removed)
  • User Feedback Mechanism (so users can easily report issues or request new features)
  • Feature Flags (to enable rolling features / changes out in a controlled manner)
deadlydog / Repository's .editorconfig file
Last active Mar 11, 2021
This .editorconfig file should live in the repository and be committed to source control. This file should not contain personal preference settings like `indent_size`, as those should be specified in a parent .editorconfig file outside of the repository.
View Repository's .editorconfig file
# This file should only include settings that affect the physical contents of the file, not just how it appears in an editor.
# Do not include personal preference presentation settings like a tab's `indent_size` in this file; those should be specified
# in a parent .editorconfig file outside of the repository.
# v1.6
# Ensure that personal preference presentation settings can be inherited from parent .editorconfig files.
root = false
charset = utf-8
deadlydog / Personal .editorconfig file
Last active Jan 15, 2021
This .editorconfig file should live outside of the repository (and thus not be committed to source control) in a parent directory, as it includes personal preference settings like `indent_size`.
View Personal .editorconfig file
# This .editorconfig file should live outside of all repositories (and thus not be committed to source control) in
# a parent directory, as it includes personal preference presentation settings, like a tab's `indent_size`.
# v1.2
root = true
indent_style = tab
end_of_line = crlf
trim_trailing_whitespace = true
deadlydog / Synchronous-ZipAndUnzip.psm1
Created Feb 17, 2017
PowerShell Module to Synchronously Zip and Unzip using PowerShell 2.0
View Synchronous-ZipAndUnzip.psm1
#Requires -Version 2.0
# Recursive function to calculate the total number of files and directories in the Zip file.
function GetNumberOfItemsInZipFileItems($shellItems)
[int]$totalItems = $shellItems.Count
foreach ($shellItem in $shellItems)
if ($shellItem.IsFolder)
{ $totalItems += GetNumberOfItemsInZipFileItems -shellItems $shellItem.GetFolder.Items() }
deadlydog / UpdateDirectoryLog4NetFilesAreWrittenToForClickOnceApplications.cs
Created Jan 25, 2017
Updates Log4Net appenders to adjust where they are set to write their log files to, to instead write them to the ClickOnce application's data directory.
View UpdateDirectoryLog4NetFilesAreWrittenToForClickOnceApplications.cs
// If we are running via ClickOnce, we need to adjust the path where the log files are written to, otherwise they won't be written at all.
if (ApplicationDeployment.IsNetworkDeployed)
var dataDirectory = ApplicationDeployment.CurrentDeployment.DataDirectory;
foreach (var appender in LogManager.GetRepository().GetAppenders())
var fileAppender = appender as FileAppender;
if (fileAppender != null)
var pathToReplace = Directory.GetParent(Directory.GetParent(fileAppender.File).FullName).FullName;
deadlydog / IncludeClickOnceRevisionInVersionNumber.cs
Created Jan 10, 2017
Shows how to include part of the ClickOnce version in your application version
View IncludeClickOnceRevisionInVersionNumber.cs
public Version ApplicationVersion = new Version("1.11.2");
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
// If this is a ClickOnce deployment, append the ClickOnce Revision to the version number (as it gets updated with each publish).
if (ApplicationDeployment.IsNetworkDeployed)
ApplicationVersion = new Version(ApplicationVersion.Major, ApplicationVersion.Minor, ApplicationVersion.Build, ApplicationDeployment.CurrentDeployment.CurrentVersion.Revision);
// Display the Version as part of the window title.
wndMainWindow.Title += ApplicationVersion;
deadlydog / Import-PfxCertificate.ps1
Created Dec 1, 2016
PowerShell script that imports a .pfx certificate file. Useful to do before building the solution on a build server.
View Import-PfxCertificate.ps1
param($PfxFilePath, $Password)
$absolutePfxFilePath = Resolve-Path -Path $PfxFilePath
Write-Output "Importing store certificate '$absolutePfxFilePath'..."
Add-Type -AssemblyName System.Security
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($absolutePfxFilePath, $Password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet")
$store = new-object -argumentlist "MY", CurrentUser
deadlydog / Show Why Projects Rebuilt in Visual Studio.reg
Last active Sep 10, 2016
Modifies the registry to have the Visual Studio output window show additional info about why a project was rebuilt, even if you had just built it.
View Show Why Projects Rebuilt in Visual Studio.reg
Windows Registry Editor Version 5.00
; This will cause Visual Studio to display additional info in the Output pane as to why a project was rebuilt, even if you had just built it.
deadlydog / RevertTFSWorkItemPriorityAndStackRanks.ps1
Last active May 13, 2016
In TFS 2012 a "bug" was introduced that transformed the functionality of the Priority and StackRank fields so that they get updated to a large random number when a work item is reordered in the web access UI, effectively wiping out the previous value that had been set manually (and purposely) by a human being. This script reverts the Priority an…
View RevertTFSWorkItemPriorityAndStackRanks.ps1
Set-StrictMode -Version Latest
$TFS_TEAM_PROJECT_COLLECTION_URI = 'YourProjectCollectionUrl' # e.g.
Function RevertField ($WorkItemCollection, $FieldName)
$WorkItemCount = $WorkItemCollection.Count
$WorkItemCounter = 0
Foreach ($WorkItem in $WorkItemCollection) {